[嘿,我的纹理加载了glTextImage2D。在将纹理加载到VRAM之后,我想获取纹理的大小,该怎么办?我的内部格式为RGBA,并且纹理的格式有所不同。
这可能对您有帮助,您可能可以从中推断出实际的内存使用情况。但是,我认为这仍然是一个近似值:
((使用NVIDIA或ATI特定扩展名查询OpenGL的总内存使用率)
还要注意,根据我的经验,通过粗略的计算来估算内存使用量通常就足够了。纹理“应该”存储1,2或4个组件,而没有任何明显的开销。因此,对于WxH RGBA纹理,计算W * H * 4。如果存储浮点纹理(即GL_RGBA32F),请计算W * H * 4 * 4。对于Mip-Map,添加(1/3)额外的内存消耗。但是请注意,至少就我所知,纹理内存也会碎片化,可能会使您的可用内存减少。
使用GetTexLevelParameter,可以给您(每个级别):
(*)使用这些参数来计算纹理大小(对于指定级别)。
单个纹理内存的使用取决于生成的mipmap。实际上,要正确计算单个纹理使用的内存,您必须确定与纹理相关的mipmap,然后将每个级别的内存使用量相加。
mipmap的数量由OpenGL规范决定,取决于纹理目标:纹理数组元素具有自己的mipmap集,每个立方体面纹理都有其自己的mipmap集。对于每个级别,将mipmap的尺寸减半,直到它们变为1。如果尺寸不是2的幂,则将它们四舍五入为较小的整数。