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