[muzzik 分享]:图片内存占用记录

结论

没有启用压缩纹理的图片,在内存中的占用大小计算公式都为:

width * height * 4 / 1024 / 1024

测试案例

环境:夜神模拟器、html

占用内存获取:cc.gfx.deviceManager.gfxDevice.memoryStatus.textureSize

相同图片不同格式

测试相同图片的不同格式 png、jpg、bmp(16位)、bmp(24位),其占用内存一致

使用压缩纹理

相同图片的内存占比差距非常大

image

ETC1 内存占用计算公式:width * height / 4 / 1024 / 1024

4赞

这说明cocos做的不太好,jpg应该用RGB888, 16位的应该用RGB565. 这都不做一下区别。
刚我看了代码就默认RGBA8888,还是让引擎的同学修一下,jpg平白增加了1/4的显存。

压缩纹理根据压缩纹理的表可以算,例如astc6*6 是 3.56 bits/pixel,那比起rgba8888,32bits/pixel的,相当于1/10了。

英文比较好的可以看看这个
https://registry.khronos.org/DataFormat/specs/1.3/dataformat.1.3.html#ASTC

1赞

jpg 自动转 rgba 的原因应该是渲染后端访问纹理数据时默认的内存对齐参数为 4,如果某个 jpg 图片的宽不为 2 的整数倍,就会访问越界。