DrawCall顾名思义,就是有启动器和收件人。 启动器是CPU,收件人是GPU。 也就是说,绘制调用是CPU向GPU启动的命令,它只是指向需要渲染的基本体列表。
给定DrawCall后,GPU将基于渲染状态(如材质、纹理和着色器)和所有输入的顶点数据进行计算,并最终输出到屏幕上显示的像素。 此过程称为渲染管线(渲染管线)
绘制管线分为几何阶段和光栅化阶段,整个过程是将顶点数据转换为屏幕数据;
GPU渲染管线在应用阶段加载到图形内存中,并接收由绘制调用指定的顶点数据作为输入,然后传递给顶点着色器。 “顶点着色器”(vertex shader )是完全可编程的,通常用于提供顶点空间变换和顶点着色等功能。
DrawCall还具有被认为是CPU调用的图像编程接口,如OpenGL的glDrawElements命令和DX的DrawIndexedPrimitive命令。
CPU和GPU通过存储CPU指令的指令缓冲器实现并行动作,GPU从其中取出指令并执行; DrawCall是CPU提交到命令缓冲区的命令之一,DrawCall越多,CPU提交的次数就越多。 与读取文件一样,过多的次数会占用CPU大量时间来提交CPU,从而导致CPU过载。 因此,我们得出的结论是,在DrawCall中引起性能问题的mldyg是CPU而不是GPU。
一种通用方法减少绘制调用:合并静态物体网格,并将多个小绘制调用合并为一个大绘制调用。 但是,运动的物体不太适合合并网格处理,空间和时间会影响。
开发中尽量不要大量使用小网格; 尽可能在不同的网格之间共享一种材质,而不使用很多材质。