我一直在使用glDisable(GL_DEPTH_TEST)禁用深度测试,以为它只会禁用深度“测试”。我感到困惑的原因是因为我创建了两个函数,一个函数禁用深度“测试”,另一个函数禁用glDepthMask(GL_FALSE);的深度“写入”

如果禁用GL_DEPTH_TEST会同时禁用“测试”和“编写”,则等同于执行以下操作:

glDepthFunc(GL_ALWAYS​); // DISABLE TESTS (OR ACTUALLY ALWAYS LET THE TEST SUCCEED)
glDepthMask(GL_FALSE); // DISABLE WRITES

我在想禁用GL_DEPTH_TEST几乎没有用,除非我想同时禁用测试和写入,而且我想知道哪种更好。措辞似乎令人困惑,但也许只是我。我想用glDepthFun(GL_ALWAYS)禁用深度测试仍会进行比较,我想在允许写入的情况下无法完全禁用深度测试吗?

最佳答案

glDisable(GL_DEPTH_TEST)

关闭管道的深度测试。如果您使用:
glDepthFunc(GL_ALWAYS​);
glDepthMask(GL_FALSE);

相反,它只是将其隐藏在条件之后(但仍存在于管道中),这可能意味着某些平台上的性能差异...

另外,使用等效项还需要您设置/记住原始的DepthFunc,以防您想再次将其打开(因为许多渲染技术需要多次打开/关闭DeptTest

最后,两个和GL 函数调用比仅一个调用具有更大的开销。因此,从性能的角度来看,使用glDisable(GL_DEPTH_TEST)更好。 glDepthFunc,glDepthMask用于不同目的,例如多遍渲染,order independent transparencyholes等。

10-08 08:33