什么是DrawCall
Draw Call 是 CPU 向 GPU 发出的一次“画图指令”。
每一次调用,都会告诉 GPU: “用这个材质 + 这些顶点 + 这个状态,把这个物体画出来。”
为什么DrawCall过高会影响效率
举个例子:拷贝10000个1kb的小文件所需要的时间远大于拷贝一个10MB的文件
因为每一个文件赋值的动作都会需要很多额外的曹组,比如内存分配,创建数据等等
渲染过程与上面的例子类似,每次DrawCall,CPU都需要准备很多数据发给GPU,GPU的渲染效率十分强大,效率受困于CPU的提交速度,如果DrawCall太多,CPU就会把大量的时间浪费在提交上,造成CPU过载,游戏卡顿
如何降低DrawCall
- 在UI层面上:
小图合成大图->即多个小DrawCall变成一次大DrawCall (使用一个图集)
注意不同图集之间的层级关系:假设有两个图集A、B,从图集A里取出两张图,分别的层级是0和2,从图集B中取一个图,层级为1,此时就会有3次DrawCall。也就是说,如果同图集的图片层级之间,存在其他图集的图片,就会打乱渲染顺序,没办法合并渲染,从而多一次DrawCall。如果A(0,1) B(2) 此时就只有两次DrawCall。
注意Label(文字)的层级:文字也会单独作为一个图集(文字一般放在最上面)