頂點着色器
在管線中的位置:1號(這圖作的跟病毒似的)
可以替代下面這些傳統的操作:
- 頂點變換
- 法線變化及規范化
- 紋理坐標生成
- 紋理坐標變換
- 光照
- 彩色材質應用
頂點着色器可以用來指定一系列完全通用的、並將應用於各個頂點及相關數據上的操作。理解這點很重要。
頂點着色器不會取代一次需要多個頂點的情況或者需要拓撲情況的圖像操作。
頂點着色器數據的輸入與輸出:
屬性變量(ATTRIBUTE VARIABLES):在頂點着色器中定義的變量可能被限定為“屬性變量”。這些變量代表了非常頻繁的從應用程序傳遞到頂點處理器的值。
屬性變量有兩種:內置和自定義的。內置的如:gl_Color、gl_Normal和gl_Vertex等。
一致變量(UNIFORM VARIABLES):用來將數據值從應用程序傳遞到頂點處理器或片元處理器。它可以作為着色器的形參。
一致變量有兩種:內置的和自定義的。內置的以gl_開頭的可以用來訪問當前的OpenGL狀態。
特殊的輸出變量:gl_Position(頂點坐標在裁剪空間中的位置),這個是必須要輸出的。
易變量:(VARYING VARIABLES):從頂點處理器傳遞數據到片元處理器。頂點着色器可以使用用戶自定義的易變量向片元着色器傳遞任何需要執行插值的數據:顏色、法線(對於各個片元的光照計算非常有用)、紋理坐標、模型坐標和其他任 意值。
易變量有兩種:內置的和自定義的。內置的易變量包括為標准的OpenGL顏色以及紋理坐標值定義的變量。
頂點處理器的輸出(特殊的輸出變量以及用戶自定義的和內置的易變量)將被發送到后續的處理階段。
片元着色器
在第一幅圖的2號位置。
可替代一下傳統的操作:
- 在插值得到的值上的操作
- 紋理訪問
- 應用紋理
- 霧化
- 顏色匯總
還可以執行各種各樣的計算。片元着色器不能更改片元的x/y的位置。片元着色器不會取代同時需要幾個片元的情況的圖形操作。片元着色器不會取代在OpenGL像素處理管道的后端發生的固定功能操作,例如:覆蓋、像素所有權測試、剪切、電話、alpha測試、深度測試、模板測試、alpha混合、邏輯操作、抖動和平面遮蔽等。
片元着色器的數據輸入與輸出:
片元着色器的一大優點是可以任意多次的訪問紋理內存,並可以任意方式結合所讀取的值。片元着色器可以隨意的從一個單獨的紋理着色器讀取多個值或從多個紋理中讀取多個值。一次紋理訪問的結果和可以作為另一次紋理訪問的基礎(及從屬紋理讀取,DEPENDENT TEXTURE READ)。這種從屬讀取可能的數量沒什么固有的限制。因此可以在片元着色器中實現管線衍射算法。
對於各個片元來說,片元着色器可以計算顏色和深度(這些值可以寫入特殊的輸出變量gl_FragColor和gl_FragDepth)或者完全丟棄片元。