嘿,我的纹理加载了glTextImage2D。 我希望在加载到VRAM后得到纹理的大小,我需要做什么? 我的内部格式是RGBA,纹理格式各不相同。
答案 0 :(得分:4)
这可能对您有所帮助,您可以从中推断出实际的内存使用情况。但是,我相信这仍然是一个近似值:
(使用NVIDIA或ATI特定扩展查询OpenGL的总内存使用量)
另请注意,根据我的经验,粗略计算近似内存使用量通常就足够了。纹理“应该”存储1,2或4个组件而没有任何显着的开销。因此,对于WxH RGBA纹理,计算W * H * 4。如果存储浮动纹理(即GL_RGBA32F),则计算W * H * 4 * 4。对于Mip-Maps,增加(1/3)额外的内存消耗。但请注意,至少据我所知,纹理内存也可能会碎片化,可能会使估计的可用内存减少。
答案 1 :(得分:1)
使用GetTexLevelParameter,可以为您提供(针对每个级别):
(*)使用这些参数计算纹理大小(对于指定的级别)。
单个纹理内存使用情况取决于生成的mipmap。实际上,要正确计算单个纹理使用的内存,您必须确定与纹理相关的mipmap,然后将每个级别的内存使用量相加。
mipmap计数由OpenGL规范决定,具体取决于纹理目标:纹理数组元素有自己的mipmaps集,每个立方体面纹理都有自己的mipmap集。 mipmap的尺寸对于每个级别都是半角的,直到它们变为1.在尺寸不是2的幂的情况下,它们被舍入到较低的整数。