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

问题描述 投票:3回答:1

某种程度上,对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测试,则可以将帧速率提高很多]

opengl graphics glsl depth-buffer
1个回答
0
投票

尝试将sampler 2D变量更改为uniform sampler 2D

我已经测试了没有uniform关键字的片段着色器,并且崩溃了。

© www.soinside.com 2019 - 2024. All rights reserved.