固定功能流水線包含6個主要的階段。這些階段幾乎都可以并行應用。如果硬件支持的話,每個頂點可以同時經(jīng)過同一個階段。由于這個原因,圖形卡的處理速度比CPU的處理速度要快得多。
● 輸入階段。輸入以頂點的形式給出,頂點的屬性包括位置、顏色和紋理數(shù)據(jù)。
● 變換和光照。根據(jù)當前視圖變換頂點。這包括將頂點的位置由3D空間(也叫做世界空間)改為2D空間(也叫做屏幕空間)。如果有些頂點對最終的顯示沒有影響,可以在這個階段移除它們。在這個階段也可以對每個頂點執(zhí)行光照計算。
● 創(chuàng)建圖元。這是使用頂點信息創(chuàng)建多邊形的過程,需要根據(jù)OpenGL的狀態(tài)把頂點連接到一起。游戲經(jīng)常使用三角形或者三角帶作為圖元。
● 光柵化。這是將多邊形轉(zhuǎn)換為像素(也叫做片段)的過程。
● 像素處理。像素處理也叫做片段處理。這個階段將測試像素,以確定是否把它們繪制到幀緩沖區(qū)中。
● 幀緩沖區(qū)。幀緩沖區(qū)是一塊內(nèi)存,代表特定的幀將顯示在屏幕上的部分?;旌显O置將決定像素如何與已經(jīng)繪制的部分進行混合。
在過去的幾年中,已經(jīng)可以使用程序控制流水線了。將程序上傳到圖形卡以后,它們將替換固定功能流水線的默認階段。重寫流水線的特定部分的小程序叫做著色器(shader)。
圖2-4顯示了可編程流水線的階段。這里刪除了變換和光照階段,添加了頂點和幾何著色器。像素處理階段也可以像像素著色器那樣進行編程。通過流水線的每個像素都會被應用像素著色器。像素著色器不能添加頂點,但是可以修改位置、顏色和紋理位置等屬性。