OpenGL GL_DEPTH_TEST vs glDepthFunc和glDepthMask?

Zeb*_*ish 2 opengl graphics zbuffer depth-buffer

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

如果禁用GL_DEPTH_TEST禁用"测试"和"写入",那么它是否相当于:

glDepthFunc(GL_ALWAYS?); // DISABLE TESTS (OR ACTUALLY ALWAYS LET THE TEST SUCCEED)
glDepthMask(GL_FALSE); // DISABLE WRITES
Run Code Online (Sandbox Code Playgroud)

我认为GL_DEPTH_TEST除非我想禁用测试和写入,否则禁用很少,我想知道哪一个更好.措辞似乎令人困惑,但也许只是我.我认为禁用深度测试glDepthFun(GL_ALWAYS)仍然会进行比较,我想在仍然允许写入的情况下,没有办法完全禁用深度测试?

Spe*_*tre 5

glDisable(GL_DEPTH_TEST)
Run Code Online (Sandbox Code Playgroud)

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

glDepthFunc(GL_ALWAYS?);
glDepthMask(GL_FALSE);
Run Code Online (Sandbox Code Playgroud)

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

DepthFunc如果你想再次打开它,你也需要使用你的等效设置/记住原件(因为有很多渲染技术需要DeptTest多次打开/关闭).

最后,两个GL函数调用的开销大于一个.所以从性能的角度来看,使用glDisable(GL_DEPTH_TEST)对此更好.将glDepthFunc,glDepthMask被用于不同的目的,如多通道渲染,顺序无关的透明度,,等...