Cocos creator中有一个动态合图的功能,也就是在运行时将内存中的任意纹理组合成一张虚拟的图集,从而合并绘制,减少drawcall。那么,Cocos Creator是如何实现这个功能的呢。
核心思想是数据结构中常说的空间换时间, 原理其实并不复杂,就是帧缓存,简单来说就是将多份spriteFrame绘制到RenderTexture上,并记录其在新的RenderTexture中所属的位置和长宽,渲染的时候利用这些信息从RenderTexture所得到的纹理上取所需要的区域。
看过Cocos Creator dynamicAtlasManager的核心代码,内容不多,一共200来行,有兴趣的可以自己取看看。
具体使用可以参考cocos creator engine内代码:
https://github.com/cocos-creator/engine/blob/5479d7202282756a7da257212b9ec01393d882ef/cocos2d/core/renderer/webgl/assemblers/sprite/2d/simple.js