为什么GLSL忽略了回报?

时间:2014-05-26 10:50:16

标签: opengl glsl

我的像素着色器行为不端,经过调试后我得到了以下像素着色器:

#version 400
void main(){
    gl_FragColor = vec4(1., 0., 0., 1.);
    return;
    gl_FragColor.r = max(gl_FragColor.r, 0.);
}

结果是黑屏。如果我注释掉最后一行gl_FragColor.r = max(gl_FragColor.r, 0.);,那么我会看到一个红色的屏幕。为什么我在第一个版本中出现黑屏而不是预期的红色屏幕?

我通读GLSL language specification,明确允许提前退货。 我使用的是Intel HD Graphics 4000。

编辑:我怀疑GLSL对版本和已弃用的变量(例如gl_FragColor)感到困惑,所以我做了以下更改:

#version 330
out vec4 FragColor;
void main(){
    FragColor = vec4(1., 0., 0., 1.);
    return;
    FragColor.r = FragColor.r;
}

我还在我的C ++程序中添加了(希望)适当的绑定: glBindFragDataLocation(pixelShader, 0, "FragColor");

同样的效果发生了: 我得到一个黑屏。如果我在return之后删除了该行,我会看到一个红色的屏幕。

编辑:按要求提供顶点着色器:

//#version 330
void main(){
    gl_Position = gl_Vertex;
}

我还没有成功启用3.3版本。

1 个答案:

答案 0 :(得分:0)

原来是一个着色器编译器错误。图形驱动程序的更新解决了这个问题。