渲染流水线的起点是CPU,即应用阶段。应用阶段大致可分为下面3个阶段。
(1)把数据加载到显存
(2)设置渲染状态
(3)调用DrawCall
把数据加载到显存
所有渲染所需的数据都需要从硬盘(Hard Disk Drive, HDD)中加载到系统内存(Random Access Memory, RAM)中。然后,网格和纹理等数据又被加载到显卡上的存储空间--显存(Video Random Access Memory,VRAM)中。显卡对于显存的访问速度更快,大多数显卡对于RAM没有的访问权利。
当把数据加载到显存中,RAM中的数据就可以移除了。但对于一些数据来说,CPU可能会使用到,比如网格数据进行碰撞检测。
设置渲染状态
什么是渲染状态呢?一个通俗的解释就是,这些状态定义了场景中的网格是怎么样被渲染的。例如,使用哪个顶点着色器(Vertex Shader)/片元着色器(Fragment Shader)、光源属性、材质等。不更改渲染状态,那么所有网格都将适用同一种渲染状态。
调用DrawCall
Draw Call就是一个命令,发起方是CPU,接收方是GPU。这个命令仅仅会指向一个需要被渲染的图元(primitives)列表。