繁体   English   中英

OpenGL 片段着色器手动深度测试崩溃

[英]OpenGL fragment shader manual depth test crash

不知何故,对 gbuffer 深度纹理和前向渲染通道的当前碎片深度之间的深度值进行非常简单的测试会导致严重崩溃。 我觉得这里一定有我遗漏的东西。 注意:使用片段着色器的帧缓冲区是多采样的。 这是崩溃的碎片着色器:

#version 330
out vec4 out_Color;
in vec2 TexCoords;
uniform sampler2D gDepth;//depth attachment from gBuffer render passs

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 卡(Geforce GT 710),我使用的是 glew 和 wgl。 如果我可以在这里进行 z 测试,我可以将帧速率提高很多

这是使用 z1 和 z2 渲染场景的照片: 不变的场景

z1 渲染

z2 渲染

编辑:我忘了提到正在使用碎片着色器的 FBO 是多采样的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM