BDBB867A-BC25-4F4C-9B71-B402D46B723E.png
1.客戶端 server 和 服務(wù)端 client
-
客戶端是存儲(chǔ)在CPU存儲(chǔ)器中的摹菠,并且在應(yīng)用程序中執(zhí)行材部,或者在主系統(tǒng)內(nèi)存的驅(qū)動(dòng)程序中執(zhí)行券册。驅(qū)動(dòng)程序會(huì)將渲染命令和數(shù)組組合起來(lái)栈顷,發(fā)送給服務(wù)器執(zhí)行痛悯!
-
服務(wù)器 和 客戶端在功能上也是異步的疟丙。 它們是各自獨(dú)立的軟件塊或硬件塊颖侄。我們是希望它們2個(gè)端都盡量在不停的工作∠斫迹客戶端不斷的把數(shù)據(jù)塊和命令塊組合在一起輸送到緩沖區(qū)览祖,然后緩沖區(qū)就會(huì)發(fā)送到服務(wù)器執(zhí)行。
2.著色器 Shader
上圖的Vertex Shader(頂點(diǎn)著色器) 和 Fragment Shader(片元著色器)炊琉。
-
頂點(diǎn)著色器 處理客戶端輸入的數(shù)據(jù)展蒂、應(yīng)用變換、進(jìn)行其他的類型的數(shù)學(xué)運(yùn)算來(lái)計(jì)算關(guān)照效果苔咪、位移锰悼、顏色值等等(有幾個(gè)頂點(diǎn)執(zhí)行幾次頂點(diǎn)著色器,因?yàn)镚PU是并行運(yùn)行悼泌,這幾個(gè)頂點(diǎn)是可以并行執(zhí)行的)松捉。
-
圖元著色器 圖形裁剪 ->光柵化之后,相對(duì)應(yīng)的像素點(diǎn)計(jì)算和填充馆里。
3.圖元裝配 Primitive Assembly
-
把頂點(diǎn)坐標(biāo)組合連起來(lái)(有九種裝配方式)
image.png
OpenGL向我們提供的3種著色器傳遞渲染數(shù)據(jù)的方法
- 屬性管道 Attributes (ins)
- 統(tǒng)一管道 Uniforms
- 紋理管道 Texture Data
Attributes屬性值
屬性就是對(duì)每一個(gè)頂點(diǎn)都要作改變的數(shù)據(jù)元素隘世。實(shí)際上可柿,頂點(diǎn)位置本身就是一個(gè)屬性。屬性值可以是浮點(diǎn)數(shù)丙者、整數(shù)复斥、布爾數(shù)據(jù)。
-
屬性值可以是顏色數(shù)據(jù)/頂點(diǎn)數(shù)據(jù)/紋理數(shù)據(jù)/光照法線械媒;
-
屬性不能直接傳值給片元著色器目锭,只能通過(guò)GLSL代碼間接傳遞給片元著色器;
-
屬性會(huì)從本地客戶端內(nèi)存中復(fù)制存儲(chǔ)在圖形硬件中的頂點(diǎn)緩沖區(qū)上纷捞。這些屬性只提供給頂點(diǎn)著色器使用痢虹,對(duì)于片元著色器木有太大意義。
-
聲明:這些屬性對(duì)每個(gè)頂點(diǎn)都要做改變主儡,但并不意味著它們的值不能重復(fù)奖唯。通常情況下,它們都是不一樣的糜值,但有可能整個(gè)數(shù)組都是同一值的情況丰捷。
Uniforms值
屬性是一種對(duì)整個(gè)批次屬性都取統(tǒng)一值的單一值。它是不變的寂汇。通過(guò)設(shè)置uniform變量就緊接著發(fā)送一個(gè)圖元批次命令病往,Uniform變量實(shí)際上可以無(wú)數(shù)次限制地使用,設(shè)置一個(gè)應(yīng)用于整個(gè)表面的單個(gè)顏色值骄瓣,還可以設(shè)置一個(gè)時(shí)間值停巷。在每次渲染某種類型的頂點(diǎn)動(dòng)畫時(shí)修改它。
-
注意:這里的uniform 變量每個(gè)批次改變一次榕栏,而不是每個(gè)頂點(diǎn)改變一次叠穆;
-
uniform變量最常見的應(yīng)用是在頂點(diǎn)渲染中設(shè)置變換矩陣;
-
與Attributes相同點(diǎn)臼膏,可以是浮點(diǎn)數(shù)、整數(shù)示损、布爾數(shù)據(jù)渗磅;
-
與Attributes不同點(diǎn),頂點(diǎn)著色器和片元著色器都可以使用uniform變量检访。uniform 變量還可以是標(biāo)量類型始鱼、矢量類型、uniform矩陣脆贵。
Texture Data 紋理數(shù)據(jù)
-
在頂點(diǎn)著色器医清、片段著色器中都可以對(duì)紋理數(shù)據(jù)進(jìn)行采樣和篩選;
-
典型的應(yīng)用場(chǎng)景:片段著色器對(duì)一個(gè)紋理值進(jìn)行采樣卖氨,然后在一個(gè)三角形表面應(yīng)用渲染紋理數(shù)據(jù)会烙;
-
紋理數(shù)據(jù)负懦,不僅僅表現(xiàn)在圖形,很多圖形文件格式都是以無(wú)符號(hào)字節(jié)(每個(gè)顏色通道8位)形式對(duì)顏色分量進(jìn)行存儲(chǔ)的柏腻。
outs 輸出
在圖表中第四種數(shù)據(jù)類型是輸出(out)纸厉;輸出數(shù)據(jù)是作為一個(gè)階段著色器的輸出定義的,二后續(xù)階段的著色器則作為輸入定義五嫂。
-
輸出數(shù)據(jù)可以簡(jiǎn)單的從一個(gè)階段傳遞到下一個(gè)階段颗品,也可以用不同的方式插入。
-
客戶端的代碼接觸不到這些內(nèi)部變量我們的OpenGL開發(fā)暫時(shí)接觸不到沃缘。
以上的總結(jié)參考了并部分摘抄了以下文章躯枢,非常感謝以下作者的分享!:
作者CC老師_HelloCoder的《OpenGL 渲染管線流程解析》