cocos2dx纹理加载

在创建图片(非压缩纹理)的时候
创建Image解析图片数据的时候会创建一倍的内存A,然后
创建Texture2D时如果图片并非是RGBA8888格式还会创建一倍内存B
然后在initWithMipmaps里glTexImage2D把数据传给GPU,又会创建一倍内存C,
返回时,会释放B,在释放A,但是C的,不知道为什么隔了段时间,就释放了,我不知道是在哪里释放的,还有我在网上查到:

在cocos中,谈谈不同纹理实际加载过程中内存变化,先以一张1024*1024 本身大小500k的jpg/png图片为例:

  1. 读取图片文件(500k)
  2. 把jpg/png数据最终都是按RGBA8888(默认)格式解析(4mb)
  3. 释放500k的图片内存
  4. 上传给OpenGL纹理数据(4mb)
  5. 释放4mb内存
    注意,这个过程不是必然的顺序执行,释放内存实际是由系统决定的,会很快,但是不一定是立即执行。 所以内存会瞬间飙升到8.5mb左右,然后减少5mb,稳定到4mb左右,这么一个过程变化。这就是我们常说的“间歇性内存飙高”。

这里说的释放内存不是立即执行为什么?这里说的是释放内存C吗?
我有看这个glTexImage2D函数的参数但是还是不理解以上的现象和说法
还有我用异步加载很多图片,但是最后全部加载完执行回调之后,内存还是慢慢的降下来不会立即降,

还有这里的:
先解释下 glTexImage2d,它会将数据从 CPU 内存通过 PCIE 上传到 GPU 内存。不使用 PBO 时它是一个阻塞 CPU 的函数,数据量大时肯定会卡。
如果阻塞CPU,那在glTexImage2D之后还能继续往下走,但是这部分内存还没有释放

2赞

用压缩纹理不会加载时内存占用

我可以尝试下,安卓和ios还有不同

使用压缩纹理安卓可以用etc1,但是ios的pvrtc的图片还要是2的n次方和正方形