glsl片段着色器矩形不会显示

时间:2018-10-27 11:31:21

标签: java glsl fragment-shader

我尝试在屏幕上绘制一个红色矩形,但是编译后,屏幕变为蓝色。有人可以帮助我了解我在做什么错吗?我是GLSL的新手

#version 330

out vec4 outColor;

void drawRectangle(in vec2 pixelXY)
{
    if(pixelXY.x > 60 && pixelXY.x < 200 && pixelXY.y > 60 && pixelXY.y < 200)
    {
        outColor = vec4(1.0, 0.0, 0.0, 0.0);
    }
}

void main()
{
    outColor = vec4(0.0, 0.0, 1.0 , 0.0);
    drawRectangle(vec2(60,100));
}

1 个答案:

答案 0 :(得分:1)

您使用恒定的实际参数调用函数drawRectangle

drawRectangle(vec2(60,100));

请注意,这与:

if (60 > 60 && 60 < 200 && 100 > 60 && 100 < 200)
{
    outColor = vec4(1.0, 0.0, 0.0, 0.0);
}

要解决此问题,您必须将实际参数更改为当前正在处理的片段的窗口坐标。参见gl_FragCoord

drawRectangle( gl_FragCoord.xy );

请注意,Fragment Shader对每个片段执行一次,并且内置的统一变量gl_FragCoord包含当前片段的坐标。