gpt4 book ai didi

c++ - 写入 gl_FragDepth,同时仍然执行深度预测试

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:55 26 4
gpt4 key购买 nike

给定深度预渲染渲染器,我有给定片段可能包含的最小深度值 - 因此,考虑任何比指示更远的片段是没有意义的。

现在,我有一个写入 gl_FragDepth 的着色器,但保证写入的值大于或等于其多边形面的深度值。我如何仍然执行深度预测试(即,如果片段深度比缓冲区值更远,则在不执行着色器的情况下丢弃),但允许我写入一个不同于(大于)插值面深度的值(如果它通过了预测试)测试?

最佳答案

从 OpenGL 4.2 (GLSL 4.20) 开始,您正在寻找的功能可作为 gl_FragDepth 上的布局限定符使用。它允许您指定您将如何修改片段着色器中的深度输出的意图。例如,以下指定您将只更改深度值以使其更大:

layout (depth_greater) out float gl_FragDepth;

这将允许在片段着色器中修改深度时仍然使用早期深度测试。如果您不遵循使用此限定符建立的“契约(Contract)”,您将获得未定义的行为。例如,使用上面的限定符,如果您使深度变小,则原本可见的片段可能会被消除。

该功能基于 GL_AMD_conservative_depthGL_ARB_conservative_depth扩展。如果您想将它与低于 4.2 的 OpenGL 版本一起使用,您可以检查是否存在这些扩展,如果可用,则以其中一种扩展形式使用它。

关于c++ - 写入 gl_FragDepth,同时仍然执行深度预测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29637989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com