1、DrawCall的概念
字面理解:绘制呼叫,表示CPU通知GPU,其概念就是CPU准备号渲染数据(顶点、纹理、法线、Shader等等)后,告知GPU开始渲染(将命令放入命令缓冲区)的命令
简单来说:一次DrawCall就是CPU准备好渲染数据通知GPU渲染的这个过程
如果游戏中DrawCall数量较高会影响CPU的效率,最直接的感受就是游戏会卡顿
举个例子,以拷贝文件那来类比,假设创建10000个小文件,每个文件大小为1kb,然后把这些文件拷贝到另一个文件夹中,你会发现,即使这些文件加起来不超过10MB,但是拷贝花费的事件是很长的,但如果单独创建一个10MB的文件拷贝到另一个文件夹,基本可以瞬间完成。
这是因为每个文件赋值操作都需要很多额外的操作,比如分配内存,创建数据等等,这些操作会带来额外的性能开销,文件越多开销越大。
渲染过程类似,每次DrawCall,CPU都需要准备很多数据发送给GPU,那么如果DrawCall越多那么额外开销就越大,其实GPU的渲染效率很强,而影响渲染效率的都是CPU提交命令的速度,如果DrawCall太多,CPU就会把大量的事件花在提交DrawCall上,造成CPU过载,游戏卡顿
2、如何降低DrawCall数量
在UI层面上,通过小图合成大图——>即多个小DrawCall变成一次大DrawCall(图集)
3、制作UI时降低DrawCall的技巧
(1)注意不同图集之间的层级关系
(2)注意Label的层级关系