嘿,我有一个加载了 glTextImage2D 的纹理。我想在加载到 VRAM 后获取纹理的大小,我需要做什么?我的内部格式是 RGBA,纹理的格式各不相同。
user187418
问问题
4510 次
2 回答
5
这可能对您有帮助,您可能可以从中推断出实际的内存使用情况。但是,我相信这仍然是一个近似值:
(使用 NVIDIA 或 ATI 特定扩展查询 OpenGL 的总内存使用情况)
另请注意,根据我的经验,通过粗略计算来近似内存使用量通常就足够了。纹理“应该”存储 1,2 或 4 个组件而没有任何显着开销。因此,对于 WxH RGBA 纹理,计算 W*H*4。如果存储浮点纹理(即 GL_RGBA32F),则计算 W*H*4*4。对于 Mip-Maps,增加 (1/3) 额外的内存消耗。但是请注意,至少据我所知,纹理内存也可能会碎片化,可能会使您估计的可用内存更少。
于 2010-06-12T15:21:03.550 回答
1
使用GetTexLevelParameter,它可以给你(每个级别):
- 宽度和高度 *
- 深度
- 内部格式 *
- 压缩格式和相对大小
(*) 使用这些参数来计算纹理大小(对于指定级别)。
单个纹理内存使用取决于生成的 mipmap。实际上,要正确计算单个纹理使用的内存,您必须确定与纹理相关的 mipmap,然后汇总每个级别的内存使用量。
mipmap 计数由 OpenGL 规范根据纹理目标确定:纹理数组元素有自己的 mipmap 集,每个立方体面纹理都有自己的 mipmap 集。对于每个级别,mipmap 的维度减半,直到它们变为 1。如果维度不是 2 的幂,则将它们四舍五入到较小的整数。
于 2010-06-12T21:19:48.550 回答