OpenGL 渲染流程圖解析

OpenGL 渲染架構(gòu)

OpenGL是使用客戶端(Client)- 服務(wù)器(Server)的形式實(shí)現(xiàn)的瑟俭,我們編寫的應(yīng)用程序可以看做客戶端,而計(jì)算機(jī)圖形硬件廠商說(shuō)提供的 OpenGL 實(shí)現(xiàn)可以看做服務(wù)端契邀。OpenGL 的某些實(shí)現(xiàn)(例如 X 窗口系統(tǒng)的實(shí)現(xiàn))運(yùn)行服務(wù)端和客戶端在一個(gè)網(wǎng)絡(luò)內(nèi)的不同計(jì)算機(jī)上運(yùn)行摆寄。這種情況下,客戶端負(fù)責(zé)提交 OpenGL 命令坯门,這些 OpenGL 命令然后被轉(zhuǎn)換為窗口系統(tǒng)相關(guān)的協(xié)議微饥,通過(guò)共享網(wǎng)絡(luò)傳輸?shù)椒?wù)端,服務(wù)端最終執(zhí)行并產(chǎn)生圖像內(nèi)容古戴。

在大多數(shù)現(xiàn)代的實(shí)現(xiàn)方案中欠橘,硬件圖形加速器(GPU)被用來(lái)完成大部分的 OpenGL 指令,它往往被構(gòu)建在計(jì)算機(jī)的核心處理器中(不過(guò)依然是獨(dú)立的部件)现恼,或者作為一個(gè)獨(dú)立的電路板被插到計(jì)算機(jī)主板上肃续。無(wú)論哪種安裝方式,我們都應(yīng)當(dāng)把圖形加速器作為服務(wù)端叉袍,把用戶程序作為客戶端來(lái)看待始锚。

OpenGL 渲染流程圖

客戶端 為OpenGL API和調(diào)用API的不同語(yǔ)言代碼,在CPU中執(zhí)行的。
服務(wù)端 為GPU硬件部分,主要由Vertex Shader畦韭、Primitive Assembly疼蛾、Fragment Shader組成。

客戶端在向服務(wù)端傳遞數(shù)據(jù)時(shí)艺配,只可以通過(guò)三種管道進(jìn)行數(shù)據(jù)傳輸:

  1. Attributes,
  2. Uniforms衍慎,
  3. Texture Data转唉,
    他們只是傳輸數(shù)據(jù)的管道,并不是具體的數(shù)據(jù)類型稳捆,用來(lái)修飾具體變量的傳輸方式赠法。
1. Attributes

就是對(duì)?個(gè)頂點(diǎn)都要作出改變的數(shù)據(jù)元素。通俗來(lái)講,用來(lái)修飾在 Shader 文件中會(huì)修改的變量砖织,如頂點(diǎn)數(shù)據(jù)款侵,紋理坐標(biāo),顏色色值等侧纯。

這些屬性對(duì)每個(gè)頂點(diǎn)都要做改變新锈,但并不意味著它們的值不能重復(fù)。通常情況下眶熬,它們都是不一樣的妹笆,但有可能整個(gè)數(shù)組都是同一值的情況。

2. Uniforms

通過(guò)設(shè)置Uniform 變量就緊接著發(fā)送一個(gè)圖元批次處理命令娜氏。用 Uniforms 修飾的變量在執(zhí)行一次 Shader 文件中拳缠,是不會(huì)發(fā)生改變的,它的改變只有通過(guò)下次進(jìn)行圖元處理時(shí)贸弥,從外部再次傳輸窟坐。

  • 與Attributes相同點(diǎn):可以是浮點(diǎn)值、整數(shù)绵疲、布爾值
  • 與Attributes不同點(diǎn):Vertex Shader和 Fragment Shader 都可以使用 uniform 變量哲鸳。uniform 變量還可以是標(biāo)量類型、?量類型最岗、uniform 矩陣帕胆。
3. Texture Data

Texture Data用來(lái)傳輸紋理數(shù)據(jù),對(duì)紋理進(jìn)行采樣和篩選般渡。
紋理數(shù)據(jù)的作用不僅僅是表現(xiàn)圖形懒豹。很多圖形文件格式都是以無(wú)符號(hào)字節(jié)形式對(duì)顏色分量進(jìn)行存儲(chǔ)的,但我們?nèi)匀豢梢栽O(shè)置浮點(diǎn)紋理驯用。這就是說(shuō)脸秽,任何大型浮點(diǎn)數(shù)據(jù)塊(例如消耗資源很大的函數(shù)的大型查詢表)都可以通過(guò)這種方式傳遞給著色器。

  • 在頂點(diǎn)著?器蝴乔、?元著?器中都可以對(duì)紋理數(shù)據(jù)進(jìn)行采樣和篩選记餐。
  • 紋理數(shù)據(jù),不僅僅表現(xiàn)在圖形薇正,很多圖形?件格式都是以?符號(hào)字節(jié) (每個(gè)顏?通道8位)形式對(duì)顏色分量進(jìn)?存儲(chǔ)的片酝。
in/out:OpenGL 定義了 in 變量將數(shù)據(jù)拷貝到著色器中,out 變量將著色器中的內(nèi)容拷貝出去挖腰。

OpenGL 渲染管線

OpenGL 實(shí)現(xiàn)了我們通常所說(shuō)的渲染管線(rendering pipeline),它是一系列數(shù)據(jù)處理過(guò)程雕沿,并且將應(yīng)用程序的數(shù)據(jù)轉(zhuǎn)換到最終渲染的圖像。
OpenGL 首先接受用戶提供的幾何數(shù)據(jù)(頂點(diǎn)和幾何圖元)猴仑,并且將它傳輸?shù)揭幌盗兄麟A段中進(jìn)行處理审轮,這些階段包括頂點(diǎn)著色細(xì)分著色(它包含兩個(gè)著色器:細(xì)分控制著色器,細(xì)分計(jì)算著色器)疾渣,以及最后的幾何著色篡诽,然后他將被送入光柵化單元(rasterizer)。光柵化單元負(fù)責(zé)對(duì)所有的剪切區(qū)域(clopping region)內(nèi)的圖元生成片元數(shù)據(jù)榴捡,然后對(duì)每個(gè)生成的片元都執(zhí)行杈女。

OpenGL 渲染管線

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市薄疚,隨后出現(xiàn)的幾起案子碧信,更是在濱河造成了極大的恐慌,老刑警劉巖街夭,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砰碴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡板丽,警方通過(guò)查閱死者的電腦和手機(jī)呈枉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)埃碱,“玉大人猖辫,你說(shuō)我怎么就攤上這事⊙獾睿” “怎么了啃憎?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)似炎。 經(jīng)常有香客問(wèn)我辛萍,道長(zhǎng),這世上最難降的妖魔是什么羡藐? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任贩毕,我火速辦了婚禮,結(jié)果婚禮上仆嗦,老公的妹妹穿的比我還像新娘辉阶。我一直安慰自己,他們只是感情好瘩扼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布谆甜。 她就那樣靜靜地躺著,像睡著了一般集绰。 火紅的嫁衣襯著肌膚如雪店印。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天倒慧,我揣著相機(jī)與錄音,去河邊找鬼。 笑死纫谅,一個(gè)胖子當(dāng)著我的面吹牛炫贤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播付秕,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼兰珍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了询吴?” 一聲冷哼從身側(cè)響起掠河,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猛计,沒(méi)想到半個(gè)月后唠摹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奉瘤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年勾拉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盗温。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡藕赞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卖局,到底是詐尸還是另有隱情斧蜕,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布砚偶,位于F島的核電站批销,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蟹演。R本人自食惡果不足惜风钻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望酒请。 院中可真熱鬧骡技,春花似錦、人聲如沸羞反。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)昼窗。三九已至是趴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間澄惊,已是汗流浹背唆途。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工富雅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肛搬。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓没佑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親温赔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛤奢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 想要學(xué)習(xí)OpenGL的渲染思想,就需要了解OpenGL中陶贼,圖片是怎么渲染到我們所看到的屏幕上的啤贩,這個(gè)流程是需要知道...
    Daniel_Harvey閱讀 4,705評(píng)論 0 3
  • OpenGL渲染架構(gòu) 客戶端、服務(wù)端 如上圖所示這里所說(shuō)的客戶端及服務(wù)端并不是傳統(tǒng)意義上的拜秧,有分界線區(qū)分上半部分為...
    JunkieBa閱讀 448評(píng)論 0 1
  • 一痹屹、OpenGL 基礎(chǔ)圖形管線 1. 管線可以理解為OpenGL渲染圖形圖像的流程 2. 管線分為兩部分 Cl...
    zhongxiaoyue閱讀 1,479評(píng)論 0 1
  • 1.客戶端 server 和 服務(wù)端 client 客戶端是存儲(chǔ)在CPU存儲(chǔ)器中的,并且在應(yīng)用程序中執(zhí)行腹纳,或者在主...
    比海更深g丶閱讀 168評(píng)論 0 0
  • 在OpenGL 中痢掠,不管是使用可編程管線還是固定管線,它的渲染架構(gòu)都是由兩部分組成:Client 和 Server...
    七天雨閱讀 460評(píng)論 1 0