我一直在使用glDisable(GL_DEPTH_TEST)
来禁用深度测试,认为它只会禁用深度"测试"。我之所以感到困惑是因为我创造了两个功能,一个用于禁用深度"测试",另一个用于禁用深度"写入"与glDepthMask(GL_FALSE);
如果禁用GL_DEPTH_TEST
,则禁用"测试"和#34;写作"那么它是否相当于:
glDepthFunc(GL_ALWAYS); // DISABLE TESTS (OR ACTUALLY ALWAYS LET THE TEST SUCCEED)
glDepthMask(GL_FALSE); // DISABLE WRITES
我认为禁用GL_DEPTH_TEST
几乎没用,除非我想禁用测试和写入,并且我想知道哪一个更好。措辞似乎令人困惑,但也许它只是我。我想用glDepthFun(GL_ALWAYS)
进行禁用深度测试仍会进行比较,我想在仍然允许写入的情况下,没有办法完全禁用深度测试?
答案 0 :(得分:5)
glDisable(GL_DEPTH_TEST)
关闭管道的深度测试。如果您使用:
glDepthFunc(GL_ALWAYS);
glDepthMask(GL_FALSE);
相反它只是在条件之后隐藏它(但仍然存在于管道中),这可能意味着某些平台上的性能差异......
如果您想再次打开原始DepthFunc
,也需要使用等效设置(因为有许多渲染技术需要打开/关闭几个DeptTest
次。
最后,两个 GL 函数调用的开销大于一个。因此,从性能的角度来看,使用glDisable(GL_DEPTH_TEST)
会更好。 glDepthFunc,glDepthMask
用于不同目的,例如多次传递呈现,order independent transparency,holes等等。