返回
Featured image of post Shader入门精要-关于Draw call

Shader入门精要-关于Draw call

笔记摘自书籍《Shader入门精要》

Draw call就是CPU调用图像编程接口(OpenGL中的glDrawElements命令),命令GPU进行渲染操作的过程。

命令缓冲区

如果CPU要等到GPU完成上一个渲染任务才能再发送渲染命令,显然会造成效率低下,因此为了让CPU和GPU可以同时工作命令缓冲区就此产生了。

命令缓冲区包含里一个命令队列,CPU向其中添加命令,而GPU从中读取命令,添加和读取过程是相互独立的,这使得CPU和GPU可以相互独立工作。

命令缓冲区除了Draw call以外还有其他命令(改变使用的着色器,使用不同的纹理等)。

Draw call对帧率的影响

在每次调用draw call之前,CPU需要向GPU发送很多内容,其中包括数据、状态、命令等。在这一阶段,CPU需要完成很多工作,列如检查渲染状态等。而一旦CPU完成了这些准备工作,CPU就可以开始本次的渲染。

GPU的渲染能力很强,渲染200个和2000个三角网格通常没有什么区别,因此渲染速度往往快于CPU提交命令的速度。如果Draw Call太多,CPU往往就会把大量的时间花费在提交Draw Call上,造成CPU的过载。

如何减少Draw Call

  • 静态批处理——(Static复选框打勾)
  • 如果使用大量很小的网格时,可以考虑是否合并它们。
  • 避免使用过多的材质。尽量在不同的网格中使用共同的材质。