我所理解的cocos2dx - 纹理(下)

纹理的缓存管理

纹理的声明周期:Texture2D在加载纹理后会把纹理上传到gpu内存里,发生在initWithMinpmaps(),而Texture2D实例被销毁的时候,会去申请删掉对应的纹理对象。有时候,为了避免一个纹理只是暂时不用,而后又会被使用到,又得从磁盘重新加载上来,应该选择性缓存一些纹理。所以一般不直接创建Texture2D对象,而是用TextureCache

textureCache管理纹理:负责纹理的创建缓存和删除。几乎所有ui元素需要的纹理都是通过此创建的。它为每一个纹理的texture2d对象创建一个索引值,后续需要用到时直接返回一个对象指针。一般是文件路径称为索引键,也能手动设置。它还有一个有用的功能就是adddImageAsync方法异步加载纹理。

场景过度中的资源管理:

1.基于引用计数的资源管理:每个观察对自己需要的资源引用+1,切换时对上一个场景资源-1,为0的就会释放掉。

2.更好的场景过渡资源管理:cache和1方法的结合,manager负责逻辑上的资源引用计数,内部实现关于短暂资源的加载和缓存

3.android下的纹理恢复处理:VolatileTextureMgr记录所有在使用的纹理相关信息。

使用纹理最佳实践

硬件层面:硬件方们一般都会针对自己的硬件产品提供特定的优化,提高传输速度,数据读取和计算优化,引擎会和他们合作,优化引擎,提升性能

程序层面:

1.提前加载资源,避免游戏中动态加载。

2.减少内存占用,释放不再使用的资源。

3.小纹理合成大纹理,提升渲染性能。

4.使用多级纹理减少内存的占用

5.使用多重纹理,一此绘制中传入更多纹理代替多次绘制,充分利用gpu并行的能力

6.alpha预乘减少透明纹理在场景混合时的计算量

资源层面:

1.选择适当的资源格式

2.设置正确的defaultAlphaPixelFormat将不同格式的纹理上传到gl内存里,避免浪费占用

3.使用压缩纹理

4.压缩质量问题,不要太在意一个图像的压缩质量,从整体去评估

上一篇:我所理解的cocos2dx - 纹理(上)
转自: usp10

--电子创新网--
粤ICP备12070055号