首页 > 代码库 > 我所理解的cocos2dx - 纹理(下)
我所理解的cocos2dx - 纹理(下)
纹理的缓存管理
纹理的声明周期:Texture2D在加载纹理后会把纹理上传到gpu内存里,发生在initWithMinpmaps(),而Texture2D实例被销毁的时候,会去申请删掉对应的纹理对象。有时候,为了避免一个纹理只是暂时不用,而后又会被使用到,又得从磁盘重新加载上来,应该选择性缓存一些纹理。所以一般不直接创建Texture2D对象,而是用TextureCache
textureCache管理纹理:负责纹理的创建缓存和删除。几乎所有ui元素需要的纹理都是通过此创建的。它为每一个纹理的texture2d对象创建一个索引值,后续需要用到时直接返回一个对象指针。一般是文件路径称为索引键,也能手动设置。它还有一个有用的功能就是adddImageAsync方法异步加载纹理。
场景过度中的资源管理:
1.基于引用计数的资源管理:每个观察对自己需要的资源引用+1,切换时对上一个场景资源-1,为0的就会释放掉。
2.更好的场景过渡资源管理:cache和1方法的结合,manager负责逻辑上的资源引用计数,内部实现关于短暂资源的加载和缓存
android下的纹理恢复处理:VolatileTextureMgr记录所有在使用的纹理相关信息。
使用纹理最佳实践
硬件层面:硬件方们一般都会针对自己的硬件产品提供特定的优化,提高传输速度,数据读取和计算优化,引擎会和他们合作,优化引擎,提升性能
程序层面:
1.提前加载资源,避免游戏中动态加载。
2.减少内存占用,释放不再使用的资源。
3.小纹理合成大纹理,提升渲染性能。
4.使用多级纹理减少内存的占用
5.使用多重纹理,一此绘制中传入更多纹理代替多次绘制,充分利用gpu并行的能力
6.alpha预乘减少透明纹理在场景混合时的计算量
资源层面:
1.选择适当的资源格式
2.设置正确的defaultAlphaPixelFormat将不同格式的纹理上传到gl内存里,避免浪费占用
3.使用压缩纹理
4.压缩质量问题,不要太在意一个图像的压缩质量,从整体去评估
我所理解的cocos2dx - 纹理(下)