加载后查找OpenGL纹理大小,以字节为单位

问题描述 投票:0回答:2

[嘿,我的纹理加载了glTextImage2D。在将纹理加载到VRAM之后,我想获取纹理的大小,该怎么办?我的内部格式为RGBA,并且纹理的格式有所不同。

opengl 2d textures pixels
2个回答
4
投票

这可能对您有帮助,您可能可以从中推断出实际的内存使用情况。但是,我认为这仍然是一个近似值:

http://www.geeks3d.com/20100531/programming-tips-how-to-know-the-graphics-memory-size-and-usage-in-opengl/

((使用NVIDIA或ATI特定扩展名查询OpenGL的总内存使用率)

还要注意,根据我的经验,通过粗略的计算来估算内存使用量通常就足够了。纹理“应该”存储1,2或4个组件,而没有任何明显的开销。因此,对于WxH RGBA纹理,计算W * H * 4。如果存储浮点纹理(即GL_RGBA32F),请计算W * H * 4 * 4。对于Mip-Map,添加(1/3)额外的内存消耗。但是请注意,至少就我所知,纹理内存也会碎片化,可能会使您的可用内存减少。


1
投票

使用GetTexLevelParameter,可以给您(每个级别):

  • 宽度和高度*
  • 深度
  • 内部格式*
  • 压缩格式和相对大小

(*)使用这些参数来计算纹理大小(对于指定级别)。

单个纹理内存的使用取决于生成的mipmap。实际上,要正确计算单个纹理使用的内存,您必须确定与纹理相关的mipmap,然后将每个级别的内存使用量相加。

mipmap的数量由OpenGL规范决定,取决于纹理目标:纹理数组元素具有自己的mipmap集,每个立方体面纹理都有其自己的mipmap集。对于每个级别,将mipmap的尺寸减半,直到它们变为1。如果尺寸不是2的幂,则将它们四舍五入为较小的整数。

© www.soinside.com 2019 - 2024. All rights reserved.