片段著色器流程圖
片段著色器(fragment shader)實現了一個通用的可編程操作片段的方法.片段著色器執行由
光柵化生成的每個片段。
• Shader PRogram(著色器程序)—片段著色器程序源碼或描述將在該片段上可以執行的操作。
• Input variables(輸入變量)—光柵化階段使用插補技術為片段著色器產生頂點著色器的輸出
• Uniforms—片段著色器的常量數據
• Samplers—Uniforms使用的具體類型,在紋理(Texture)中被片段著色器使用
片段著色可以丟棄片段或生成一個或多個顏色值作為輸出。通常情況下,片段著色輸出一個
單一的顏色值,除了渲染到多個渲染目標。在后一種情況下,每一個顏色值是每個渲染目標
的輸出。光柵化所產生的顏色、深度、模板和屏幕坐標位置(XW,YW),成為對每個片段的
操作階段的OpenGL ES 3輸入。
#version 300 es precision mediump float; in vec4 v_color; out vec4 fragColor; void main() { fragColor = v_color; }
precision mediump float
設置默認精度
in vec4 v_color
輸入顏色屬性。
out vec4 fragColor
輸出顏色屬性
fragColor = v_color
片段著色器的輸入是被傳遞到片段著色前通過圖元線性插值。
每個片段執行的操作流程
•• Pixel ownership test—這個測試決定在幀緩沖區中某點(Xw,Yw)的像素當前是否被 OpenGL ES 所有,這個測試準許視窗操作系統去控制幀緩沖區中的像素是否屬于OpenGL ES context,例如視窗檢測到OpenGL ES 的幀緩沖區被另一個窗口遮擋,視窗系統可以決定遮 擋OpenGL ES 的內容,不顯示。
•• Scissor test——測試(Xw,Yw)是否在剪切矩陣內,如果在矩陣外,片段被丟棄。 模板深度測試—決定輸入的片段是否應該被丟棄
•• Stencil and depth tests—測試在模板上執行輸入片段的深度值,決定輸入的片段是否
應該被丟棄
•• Blending—混合新產生的片段顏色和存儲在顏色緩沖區中的顏色
•• Dithering—被使用在用幾種顏色的組合模擬出大范圍內的多種色彩模式 per-fragment 階段最后,片段顏色、深度值、模板值是否被寫入幀緩沖區還要依靠各自的
掩 碼位是否被使用,例如,顏色緩沖區能設定紅色是否能被寫入顏色緩沖區。
在最后,被丟棄片段的顏色、深度和模板值被寫入到幀緩沖區。OpenGL ES提供了一個接口來讀取幀的像素。
新聞熱點
疑難解答