什么是drawcall?
每次CPU准备数据,并且通知给GPU的这个过程,就是一次DrawCall。
就是CPU调用图像应用编程接口,来命令GPU进行渲染的操作。 Cpu和Gpu是并行工作的,处理的方式有一个命令缓存区, 命令缓冲区中的命令还有很多种类,而DrawCall是其中的一种, 其他命令还有改变渲染状态等(例如改变使用的着色器,使用不同的纹理等)。
提交大量很小的DrawCall会造成CPU的性能瓶颈,即CPU把时间都花费在准备DrawCall的工作上了。 那么很显然的一个优化方法就是把很多小的DrawCall合并成一个大的DrawCall,这就是批处理的思想。批处理又分为静态批处理和动态批处理。
2d游戏的资源都是图片,单个图片调用一次DrawCall会导致Cpu太难了,这样有没有办法降低提交次数呢? 可以通过打包图集的操作来降低DrawCall,比如界面所用到的图片打包成图集或者人物的序列图打包到图集
CPU在提交DrawCall的时候,一个mesh和一个texture就对应一次DrawCall,两个mesh一个texture对应两次DrawCall, 所以减少DrawCall一般从这两个方面入手,将多个mesh合并成一个,或者用图集将多个texture合并成一个