1 PNG和ETC的加载区别
1.1 PNG
PNG是一种图片压缩格式,并不能被GPU直接识别,CPU把PNG图片读取到内存后,还需要在内存中解码,转换成GPU能识别的数据格式,然后传送给GPU渲染。
整个过程所占内存是编码数据*1+解码数据*2
,即原始PNG文件占一份,解码后的数据在内存和GPU各占一份。
2.1 ETC
ETC是一种能被GPU直接识别的压缩纹理格式,CPU把ETC压缩纹理读取到内存后,无需解码,直接传送给GPU渲染。
整个过程所占内存是压缩纹理数据*2
。
2 测试环境
- CocosCreator 2.4.x
- 构建Android包在真机上测试
- 关闭纹理缓存,即 cc.macro.CLEANUP_IMAGE_CACHE = true,使加载后的图片内存及时释放。
- 4种尺寸的图片:等于2048、小于2048、等于1024、小于1024,各使用4张不同的。
3 内存对比
3.1 加载PNG
3.1.1 长宽等于2048的图片
理论内存是16M。第一次加载完后,内存增加约32M,后面再加载了3张相同大小的不同图片,每次增加约16M。
为什么第一次会增加32M呢?在 cc.macro.CLEANUP_IMAGE_CACHE = true 的情况下&