在OpenGL中启用快速Z清除

问题描述

我发现自己需要每帧清除depth buffer多次,以实现分层渲染。

在2000年代初期,由于一天中的带宽有限,清除Z实际上是非常昂贵的。因此,AMD提出了HyperZ之类的技术,其中包括针对深度缓冲区的快速Z清除操作。

在这个时代,我是否可以假设所有制造商都已实现深度值的快速清除,并且认情况下启用了此功能

是我应该知道的OpenGL扩展,还是需要在某个地方切换的设置?

顺便说一下,我的目标是OpenGL Core Profile 3.2。

解决方法

在不了解您要做什么的情况下,我不能确定解决您问题的最佳方法。但是,有一个核心配置文件功能可以提供您想要的功能:glClearBuffer

float far_value = 1.0f;
glClearBufferfv(GL_DEPTH,& far_value);

通过将深度设置为最大值,可以有效清除深度缓冲区。现在,您可能需要绘制也具有最大深度的片段。 glDepthFunc(GL_LEQUAL)在这种情况下将很有用。 GL_LESS是初始默认值。