OpenGL说如果深度函数是GL_LESS并且布局限定符是depth_less,那么OpenGL将执行早期深度测试。
现在,如果缓冲区中的原始值为0.5,并且特定像素的深度为0.8,则早期深度测试将失败。但是如果我们将值修改为0.4那么它就不会失败。在这种情况下,这是如何工作的?
答案 0 :(得分:4)
我不认为你问题中的价值观组合是有道理的。使用(默认)GL_LESS
深度比较功能,您需要使用:
layout (depth_greater) out float gl_FragDepth;
仍允许进行早期深度测试。使用此声明,您可以保证,如果更改着色器中的深度值,则只会使其变大。
使用GL_LESS
比较功能,深度测试失败的片段的深度值将大于深度缓冲区中的当前值。这意味着可以使用早期深度测试,而不会影响depth_greater
:
使用任何具有任何深度函数的布局限定符是完全合法的。但是如果你使用:
layout (depth_less) out float gl_FragDepth;
使用GL_LESS
,它确实无效,并且不会使用早期深度测试。