【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队列里面,然后再在主线程中进行渲染相关处理,所以需要在回调到主线程之后进行上述优化处理,并且因为是在主线程,所以不用担心线程安全的问题。

相关文章

操作步骤 1、创建cocos2d-x工程 2、新建 Scene1.cpp Scene1.h Scene1.h代码 #ifndef __SCENE1_H__#defi...
开发环境:OS(WINDOWS 8.1 X64 企业版) cocos2d-x 2.2.1 vs2010 想给vs安装上cocos的模版,执行Install...
把创建项目做成一个批处理,当创建项目时可以省时省力很多。 操作步骤 1、在 E:cocos2d-x-2.2.1toolspr...
https://www.cnblogs.com/JiaoQing/p/3906780.html 四个响应函数 1 EventListenerPhysicsContact* evC...
转载于 http://www.cnblogs.com/kenkofox/p/3926797.html 熟悉js的dom事件或者flash事件的,基本都能立...
ScrollView(滚动容器)加载大量item时会导致游戏界面的卡顿,严重时整个界面会出现卡死的情况。最近项...