【问题标题】:Texture vs storage for FBO depth bufferFBO 深度缓冲区的纹理与存储
【发布时间】:2015-12-21 02:28:57
【问题描述】:

假设设备支持 GL_OES_depth_texture 扩展,在将存储或纹理附加到 FBO 时,在性能或内存消耗方面是否有任何差异?

【问题讨论】:

    标签: opengl-es opengl-es-2.0


    【解决方案1】:

    您的帖子标有 OpenGLES 2.0,这很可能意味着您在谈论移动设备。

    许多 Android 移动 GPU 和所有 iOS GPU 都基于基于 Tile 的延迟渲染器 - 在此设计中,所有渲染都是使用特殊的快速片上内存对小型(例如 32x32)图块完成的。在典型的渲染过程中,通过正确调用 glClear 和 glDiscardFramebufferEXT,设备无需将深度缓冲区从片上内存复制到存储中。

    但是,如果您使用深度纹理,则此副本是不可避免的。将屏幕大小的深度纹理从片上存储器传输到纹理的成本非常高。但是,我希望在渲染过程中绘制调用的渲染成本不会受到影响。

    在内存使用方面,它更具推测性。如果您没有使用深度纹理并且您正确使用 glClear 和 glDiscardFramebufferEXT,那么聪明的驱动程序可能根本不需要为 TBDR GPU 上的深度缓冲区分配任何内存,因为您的深度缓冲区在任何时候都没有由任何存储支持。驱动程序是否真的这样做是驱动程序实现内部的,您必须询问驱动程序作者(Apple/Imagination Technologies/ARM 等)。

    最后,深度缓冲区格式可能必须进行一些重新配置才能用作深度纹理,这可能意味着它会使用更多内存并影响效率。不过我认为这不太可能。

    TLDR:除非您确实需要,否则不要使用深度纹理,但如果您确实需要,那么我认为它不会对您的渲染性能产生太大影响。主要成本在复制深度数据的带宽上。

    【讨论】:

    • 非常感谢 :) 因此,我将在我的渲染引擎中将可读深度缓冲区作为选项而不是默认设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2018-01-01
    • 1970-01-01
    相关资源
    最近更新 更多