在渲染管线中是最慢的阶段决定整个渲染的速度。算法
咱们通常使用吞吐量(throughput)来描述一个阶段的处理速度,而不是帧率。由于帧率会受到设备更新的限制而致使实际速度比帧率所标示的更慢。数组
一个例子:动画
假设一个设备为60赫兹,这意味着这个设备16.666666ms刷新一次,这时刚好有一管线阶段花费了62.5ms执行完成,因为63大于16.666666*3,小于16.666666*4,因此他实际上想要最终完成工做必须等待下一次设备刷新。因此真实的执行时间折算下来其实不止62.5ms而是趋近于66ms。固然,若是关闭了垂直同步就另当别论了。spa
一个渲染管线能够粗略的按照执行顺序分红三大阶段:3d
这些阶段又能够细分为更多的子阶段,注意这些都是功能性的分配,在实现上为了效率等因素每每会合并一些阶段或者拆分一些阶段等等。blog
下面是一张图:同步
1、应用阶段it
这个阶段的目标就是为几何阶段产生合适的图元数据,通常来讲,不少工做都在这个阶段完成,诸如碰撞检测、动画、输入、固然还有一些加速管线的算法,好比层次视椎剔除(hierarchical view frustum culling)等等。模板
2、几何阶段效率
几何阶段集中于逐多边形操做和逐顶点操做。
3、光栅阶段
最后要梳理一下各类shader一般都作什么:
vertex shader:模型-视图转换,顶点着色,投影
geometry shader:操做图元顶点(primitive概念看下方)——图元着色、销毁/建立图元
pixel(fragment) shader:像素着色
几何primitive: points、lines、triangles