【cocos2dx】运行时内存优化

针对jpg格式的图片,我使用webp格式进行压缩,但是cocos引擎对图片纹理加载处理比较粗糙,统一按照RGBA8888进行处理的。导致jpg格式文件的内存占用增大了,因为jpg格式是没有alpha通道的,也按照RGBA8888处理就无端增大了内存。我直接加载一个jpg格式纹理,内存占用如下图:



看到这个LoginUI.jpg格式文件占用了2304K的内存,并且bpp为32(bpp为BitsPerPixelForFormat),所以针对这块我做了些优化,分别在同步和异步加载纹理的时候,进行g_defaultAlphaPixelFormat的设置,当加载png格式的时候使用RGBA8888,使用jpg格式的时候使用RGB888。优化后内存占用如下图:



经过优化,该jpg图片内存占用从2304K降低到1728K,降低了25%,效果不错。修改代码如下:




当然,对g_defaultAlphaPixelFormat进行了设置要记得还原。上面是同步加载纹理的时候进行的优化,在异步加载的时候,需要在addImageAsyncCallBack中进行上述优化,因为异步加载的过程是在子线程加载纹理,创建image及回调函数的一个结构体,然后在TextureCache::loadImage把这个结构体塞回到主线程的_asyncStructQueue队列里面,然后再在主线程中进行渲染相关处理,所以需要在回调到主线程之后进行上述优化处理,并且因为是在主线程,所以不用担心线程安全的问题。

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...