在渲染管線中是最慢的階段決定整個渲染的速度。算法
咱們通常使用吞吐量(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