OpenGL GL_DEPTH_TEST 对比 glDepthFunc 和 glDepthMask?

OpenGL GL_DEPTH_TEST vs glDepthFunc and glDepthMask?

我一直在使用 glDisable(GL_DEPTH_TEST) 来禁用深度测试,认为它只会禁用深度 "testing"。我猜我感到困惑的原因是因为我创建了两个函数,一个是禁用深度 "test",另一个是禁用深度 "writes" 和 glDepthMask(GL_FALSE);

如果禁用 GL_DEPTH_TEST 会同时禁用 "testing" 和 "writing" 那么它是否等同于:

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);

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

如果你想再次打开它(因为有许多渲染技术需要切换 DeptTest on/off几次。

最后,两次 GL 函数调用比一次调用的开销更大。所以从性能的角度来看,使用 glDisable(GL_DEPTH_TEST) 更好。 glDepthFunc,glDepthMask 用于不同的目的,如多通道渲染、,holes 等...