我的像素着色器行为不端,经过调试后我得到了以下像素着色器:
#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版本。
答案 0 :(得分:0)
原来是一个着色器编译器错误。图形驱动程序的更新解决了这个问题。