在cocos2dx的英文论坛写了一大段英文也没人回复T_T,转战中文论坛求教中。
以下问题用cocos2dx3.0 rc版本以及正式版都测试过~~~~
我们游戏有很多场景是一个大table里面有若干个组成复杂但是相互类似的格子(比如图鉴),为此我做了一个简单的测试,放了3个相同的item(复制粘贴出来的),每个item由6个不同贴图的sprite组成(我知道碎图合并可以减少draw call,此例只为测试,而且最后我们也无法合并到只用一张图),没有用batchnode,因为我理解新的renderer会自动把同样贴图同样深度的sprite合并drawcall的,最后应该只有6个draw call,可是测试下来发现一共有18个draw call,并没有发生合并。
然后我研究了一下render部分的代码,发现最后在绘制的时候会判断一下当前command和前一个command的material是否一致,一致则合并,但是我的command是1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,所以全部都无法合并。我自己暴力的在排序的时候,对z=0的queue(18个command都在这)按照material排了下序,这样就能够得到想要的6个draw call的效果。
我的问题:
- 我的这种情况,期待6个draw call是正确的吗?
- 如果正确,那么是我哪里用法不对造成有18个draw call?
- 如果不正确,那么这个auto-batching是设计来优化什么样子的情形的?
- 像我说的这种情况,比如一页有16个item,有什么高效的做法吗?
求指点~~多谢。


