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