Opengl es FBO深度缓冲区的纹理与存储

Opengl es FBO深度缓冲区的纹理与存储,opengl-es,opengl-es-2.0,Opengl Es,Opengl Es 2.0,假设设备支持GL_OES_depth_纹理扩展,那么在将存储或纹理附加到FBO时,在性能或内存消耗方面是否存在任何差异?您的帖子使用OpenGLES 2.0进行标记,这很可能意味着您正在谈论移动 许多Android移动GPU和所有iOS GPU都基于基于分片的延迟渲染器-在这种设计中,渲染都是使用特殊的快速片上内存对小(例如32x32)分片进行的。在典型的渲染过程中,通过正确调用glClear和glDiscardFramebufferEXT,设备无需将深度缓冲区从片上内存复制到存储器中 但是,如

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

您的帖子使用OpenGLES 2.0进行标记,这很可能意味着您正在谈论移动

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

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

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

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


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

你的文章被标记为OpenGLES 2.0,这很可能意味着你在谈论移动

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

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

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

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

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

非常感谢:)因此,我将使可读深度缓冲区成为渲染引擎中的一个选项而不是默认值。非常感谢:)因此,我将使可读深度缓冲区成为渲染引擎中的一个选项而不是默认值。