2

我一直在使用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)仍然会进行比较,我想没有办法完全禁用深度测试同时仍然允许写入?

4

1 回答 1

6
glDisable(GL_DEPTH_TEST)

从管道关闭深度测试。如果您使用:

glDepthFunc(GL_ALWAYS​);
glDepthMask(GL_FALSE);

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

同样使用您的等价物需要您设置/记住原始DepthFunc内容,以防您想再次打开它(因为有许多渲染技术需要DeptTest多次打开/关闭。

最后,两个GL函数调用的开销比一个更大。因此,从性能的角度来看,使用glDisable(GL_DEPTH_TEST)效果更好。glDepthFunc,glDepthMask它们用于不同的目的,如多通道渲染、顺序无关的透明度等......

于 2018-02-07T08:10:26.700 回答