我一直在使用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 transparency,holes等。