某种程度上,对gbuffer深度纹理和前向渲染过程的当前碎片深度之间的深度值进行非常简单的测试会导致严重崩溃。我觉得这里一定有我想念的东西。这是崩溃的碎片着色器:
#version 330
out vec4 out_Color;
in vec2 TexCoords;
in vec3 ScreenPos;//position of fragment in NDC
sampler2D gDepth;
void main() {
float z1 = texture(gDepth, TexCoords).r;//depth from gbuffer depth, a float32 texture
float z2 = gl_FragCoord.z;
if(z1 < z2) { //MANUAL Z TEST -- this single line causes a huge crash at run time
out_Color = vec4(1, 0, 0, 1);//color rejected frags red as a diagnostic
return;
}
else{
out_Color = vec4(0,0,1,1);//else, frags are colored blue
}
}
全部来自于其他可以正常工作的代码,而我已经将此问题诊断为这一行。我的显卡是最近的Nvidia卡,我正在使用glew和wgl。如果我可以在这里进行z测试,则可以将帧速率提高很多]
尝试将sampler 2D
变量更改为uniform sampler 2D
。
我已经测试了没有uniform
关键字的片段着色器,并且崩溃了。