片段處理器負責運行片段著色器。頂點著色器負責的操作包括:
- 為每個像素計算顏色和紋理坐標
- 紋理應用(應用紋理)
- 霧計算
- 計算法線(如果你想對每個像素應用光照)
本單元的輸入為之前階段計算得到的插值如頂點位置,顏色和法線等。
頂點著色器會為每個頂點計算這些值。現在我們在處理圖元中的片段,因此需要插值。
和頂點處理器一樣,當你編寫了一個片段著色器,它將替代對應的所有固定功能。因此讓片段著色器執行紋理操作,然后將霧操作留給固定功能管線是不可能的。程序員必須編寫應用需要的所有效果。
片段處理器對單個片段進行處理,因此對于旁邊的片段一無所知。與頂點著色器類似,片段著色器能夠訪問OpenGL狀態,因此它能夠訪問在OpenGL應用程序中指定的的霧顏色。
注意:片段著色器不能夠修改之前計算得到的像素坐標。回憶一下,在頂點處理器中,我們使用模型視圖和投影矩陣來變換頂點。視口變換應用于此之后,但是片段處理器之前。片段著色器能夠訪問屏幕像素的位置但是不能改變它。
片段著色器有兩個輸出選項:
- 丟棄片段,因此什么也不輸出
- 當需要渲染到多個目標上時,計算gl_FragColor(片段的最終顏色)或者gl_FragData。
注意:片段著色器不能訪問幀緩沖區。這意味著像混合這樣的操作只能應用于片段著色器之后。
整個shader流程: