我一直在使用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)进行禁用深度测试仍然可以进行比较,我认为在允许写操作的同时,不可能完全禁用深度测试?
发布于 2018-02-07 08:10:26
glDisable(GL_DEPTH_TEST)关闭管道深度测试。如果你使用:
glDepthFunc(GL_ALWAYS);
glDepthMask(GL_FALSE);相反,它只是在条件(但仍然存在于管道中)之后隐藏它,这可能意味着某些平台的性能差异.
同样,如果您想再次打开原始DepthFunc (因为有许多渲染技术需要多次打开/关闭DeptTest ),则需要设置/记住原始的DeptTest。
最后,两个GL函数调用的开销大于一个。因此,从性能的角度来看,使用glDisable(GL_DEPTH_TEST)更好。glDepthFunc,glDepthMask用于多通道渲染、order independent transparency、holes等多种用途。
https://stackoverflow.com/questions/48658319
复制相似问题