渲染图元堆栈时的 openGl GPU 优化

openGl GPU optimization when rendering stacks of primitives

如果我渲染 15 个大小相同的完全不透明四边形,禁用深度测试,GPU 硬件/软件切割器是否足以处理最上面的四边形并丢弃另一个 vertices/fragments?或者使用模板缓冲区来达到同样的效果会有好处吗?

当然,它会为所有不透明四边形生成碎片。此外,如果禁用深度测试,您可能会在屏幕上看到背面。因为深度测试被禁用,最后渲染的人将绘制屏幕。

即使使用模板缓冲区,仍会为四边形生成片段,通过模板和深度测试。

在这种情况下,大多数 GPU 都会透支,如果您的四边形很大,这对性能非常不利。最好的优化方法不是使用模板缓冲区,而是启用深度测试、分配适当的深度值并从前到后渲染四边形。

但是,在某些条件下(例如没有混合)基于图块的延迟渲染 (TBDR) GPU 在许多移动设备中很常见(特别是所有 iOS 设备和许多 Android 设备使用的 PowerVR 设备)将执行一个称为隐藏表面移除 (HSR) 的过程,该过程将优化这种情况并避免渲染将被遮挡的像素。