iOS 设备使用 PowerVR 图形架构。 PowerVR 架构是一个 tile-based deferred rendering模型。该模型的主要优点是它不使用深度缓冲区。
但是,我可以在我的 iOS 设备上访问深度缓冲区。具体来说,我可以使用屏幕外帧缓冲区对象将深度缓冲区转换为颜色纹理并进行渲染。
如果 PowerVR 架构不使用深度缓冲区,我如何能够渲染深度缓冲区?
最佳答案
确实,基于图 block 的渲染器不需要传统的深度缓冲区即可工作。
TBR 将屏幕分成小块,并使用快速片上内存来存储临时颜色和深度来完整呈现该小块的内容。然后,当拼贴完成时,最终值将移至实际的帧缓冲区。然而,深度缓冲区中的深度值传统上是临时的,因为它们仅用作隐藏表面算法。然后在渲染图 block 后可以完全丢弃这种情况下的深度值。
这意味着有效的基于图 block 的渲染器并不需要在较慢的视频内存中使用全屏深度缓冲区,从而节省带宽和内存。
Metal API 很容易公开此功能,允许您将深度缓冲区的 storeAction 设置为“无关”值,这意味着它不会将生成的深度值备份到主内存中。
这种情况的异常(exception)是您可能需要渲染后的深度缓冲区内容(即用于延迟渲染器或作为某些使用深度值运行的算法的源)。在那种情况下,硬件必须确保深度值存储在帧缓冲区中供您使用。
关于ios - PowerVR GPU 如何提供深度缓冲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10075774/