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