为了分层渲染,我发现自己需要每帧多次清除深度缓冲区。
在 2000 年代初期,由于当时带宽有限,清除 Z 实际上非常昂贵。因此,AMD 提出了HyperZ之类的技术,其中包括针对深度缓冲区的快速 Z 清除操作。
在这个时代,我是否可以假设所有制造商都实现了深度值的快速清除,并且默认启用它?
或者是否有我应该注意的 OpenGL 扩展,或者我需要在某处切换的设置?
顺便说一下,我的目标是 OpenGL Core Profile 3.2。
如果不了解您正在尝试做什么,我无法确定您的问题的最佳解决方案。但是,有一个核心配置文件功能可能会提供您想要的:glClearBuffer。
float far_value = 1.0f;
glClearBufferfv(GL_DEPTH, 0, & far_value);
这通过将深度设置为最大值来有效地清除深度缓冲区。现在,您可能想要绘制也具有最大深度的片段。glDepthFunc(GL_LEQUAL)
在这种情况下会很有用。GL_LESS
是初始默认值。