這張圖對(duì)openGL的開發(fā)者非常重要 我們?cè)谔幚砣魏螆D片的渲染都是根據(jù)它 基于openGl封裝的框架也是遵守這個(gè)規(guī)則
客戶端 服務(wù)端
跟我們平常理解的客戶端 和服務(wù)端不一樣 這個(gè)管線分為兩部分 上半部分是客戶端Client 下部分是服務(wù)端Server
客戶端 負(fù)責(zé)發(fā)送openGL命令 服務(wù)端接受openGL的命令并執(zhí)行相應(yīng)的操作 對(duì)于個(gè)人計(jì)算機(jī)而言 CPU 內(nèi)存 我們編寫的openGL代碼可以看做客戶端 而openGL驅(qū)動(dòng)程序顯示設(shè)備可以看做是服務(wù)端
客戶端和服務(wù)端都是異步執(zhí)行的 客戶端不斷的把數(shù)據(jù)和命令組合到一個(gè) 發(fā)送到緩存區(qū) 然后緩沖區(qū)將這些發(fā)送到服務(wù)器執(zhí)行 我們都希望他們都在不停的工作 如果服務(wù)端停止工作來等待客戶端 或者客戶端來等待服務(wù)端的情況叫做管線停滯
著色器
頂點(diǎn)著色器(Vertex Shader) 和片元著色器(Fragment Shader)
頂點(diǎn)著色器 將客端傳入的頂點(diǎn)數(shù)據(jù) 進(jìn)行計(jì)算 并且各個(gè)頂點(diǎn)直接的計(jì)算是并行的
片元著色器 片元著色器將計(jì)算每個(gè)像素的顏色值
屬性情竹、uniform值、紋理、輸出
屬性 就是每一個(gè)頂點(diǎn)都要進(jìn)行改變的數(shù)據(jù)元素
它可以是浮點(diǎn)數(shù) 整數(shù) 布爾值 和顏色數(shù)據(jù) 紋理坐標(biāo)和光照坐標(biāo) 他能直接的傳遞到頂點(diǎn)著色器 只能間接的通過GLSL代碼傳遞到片元著色器
uniform 值 能直接的傳遞到頂點(diǎn)著色器 和片元著色器 他是對(duì)同一個(gè)批次的的所有頂點(diǎn)都取統(tǒng)一的值 比如設(shè)置一個(gè)表面的顏色值 比如在頂點(diǎn)渲染中的變換矩陣 他可以是浮點(diǎn)數(shù) 整數(shù) 布爾值 和 矢量類型 uniform 矩陣
紋理 可以傳遞給頂點(diǎn)著色器 和片元著色器 不過我們一般都不傳遞給頂點(diǎn)著色器 比如 片元著色器 對(duì)一個(gè)紋理進(jìn)行采樣 然后 在一個(gè)圖形表面渲染紋理數(shù)據(jù)
輸出 輸出數(shù)據(jù)是前一個(gè)階段的輸出定義值 作為下一個(gè)階段的輸入值