我所理解的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.压缩质量问题,不要太在意一个图像的压缩质量,从整体去评估

posted on 2017-07-05 14:18 usp10 阅读(...) 评论(...) 编辑 收藏

导航

公告