假设设备支持GL_OES_depth_texture扩展,在将存储或纹理附加到FBO时,性能或内存消耗方面是否存在差异?
答案 0 :(得分:3)
您的帖子标有OpenGLES 2.0,这很可能意味着您正在谈论移动设备。
许多Android移动GPU和所有iOS GPU都基于基于平铺的延迟渲染器 - 在此设计中,渲染全部使用特殊的快速片上存储器完成到小型(例如32x32)磁贴。在典型的渲染过程中,通过正确调用glClear和glDiscardFramebufferEXT,设备无需将深度缓冲区从片上存储器复制到存储器中。
但是,如果您使用深度纹理,则此副本不可避免。将屏幕尺寸的深度纹理从片上存储器转移到纹理中的成本是显着的。但是,我希望渲染过程中绘制调用的渲染成本不受影响。
就内存使用而言,它更具投机性。如果您没有使用深度纹理并且您正确使用glClear和glDiscardFramebufferEXT,那么聪明的驱动程序可能根本不需要为TBDR GPU上的深度缓冲区分配任何内存。在任何情况下,您的深度缓冲区都不得由任何存储支持。驱动程序是否实际执行此操作是驱动程序实现的内部因素,您必须询问驱动程序作者(Apple / Imagination Technologies / ARM等)。
最后,情况可能是深度缓冲区格式必须经过一些重新配置才能用作深度纹理,这可能意味着它使用更多内存并影响效率。我认为这不太可能。
TLDR:除非你真的需要,否则不要使用深度纹理,但是如果你确实需要,那么我认为它不会对你的渲染性能产生太大影响。主要成本是复制深度数据的带宽。