一批Sprite创建自同一个plist,层级相同并且连续无其他纹理打断,这一批Sprite的drawcall应该是1,当这一批sprite.opacity=255时drawcall一切都正常,但是只要其中某个opacity!=255问题就来了,drawcall会随着其中不同opacity的值的个数增加而增加,经验证之前的版本没有这个问题。
2.0 优化了所有顶点的数据填充,将 color 变为一个 uniform,所以 color(opacity)的改变会打断渲染批次。在 color 变化的时候会导致 draw call 增加,GPU 压力升高,但是整体的数据填充损耗要低于 1.x,这是降低了 CPU 的损耗。做这个调整的两个理由是:
- 我们观察大多数 2D 游戏的性能热点都不在 GPU 渲染上,而是在 CPU 端的逻辑上
- color 的变动是临时并且局部的,但是顶点数据的填充发生在每个节点的每个顶点上,所以我们选择优化更通用的 use case
3赞