iOS OpenGL開發(fā)(三) - OpenGL渲染架構(gòu)解析

OpenGL

前言

前兩篇文章中給大家解析過了什么是OpenGL的一些常用名詞篮奄,掌握一些常用的名詞捆愁,可以更加方便我們后面的學(xué)習(xí)和理解,也方便我們后面在遇到之后更加容易去查找窟却。然后講了著色器的渲染流程昼丑,我們基本上把大致是怎么玩兒的也弄清楚了。那么這一片文章就從OpenGL的渲染架構(gòu)開始夸赫,帶大家聊了解一下OpenGL的渲染架構(gòu)到底是怎么組成的菩帝。

OpenGL渲染架構(gòu)

首先我們來看一張架構(gòu)圖:


著色器渲染架構(gòu)圖

解釋一下什么叫做客戶端,什么叫做服務(wù)端

  • 客戶端:我們編寫的代碼茬腿,或者是說調(diào)用的OpenGL的API呼奢,客戶端是存儲在CPU存儲器中的,并且在應(yīng)用程序中執(zhí)行切平,或者再主系統(tǒng)內(nèi)存的驅(qū)動程序中執(zhí)行握础。
  • 服務(wù)端:就是計(jì)算機(jī)圖形硬件廠商所提供的OpenGL的實(shí)現(xiàn)。我們編寫的GLSL代碼也是在服務(wù)端去運(yùn)行的悴品,簡單來說就是操作的GPU禀综。

服務(wù)端和客戶端在功能上是異步的简烘,也就是說他們是各自獨(dú)立的軟件塊或者硬件塊,或者軟硬件都有定枷,為了獲得最佳的性能孤澎,我們希望兩方面都盡可能不停地工作∏分希客戶端不斷地將數(shù)據(jù)塊和命令塊組合到一起送到緩沖區(qū)覆旭,然后這些緩沖區(qū)會發(fā)送到服務(wù)端執(zhí)行。服務(wù)端將執(zhí)行這些緩沖區(qū)的內(nèi)容岖妄,與此同時客戶端又做好了發(fā)送下一個用于渲染的數(shù)據(jù)或者信息的準(zhǔn)備姐扮,如果服務(wù)端停止工作等待客戶端,或者客戶端停止了工作來等待服務(wù)端做好接受更多命令和數(shù)據(jù)的準(zhǔn)備衣吠,我們就把這情況稱為管線停滯茶敏。

從上面的圖,我們也能看出缚俏【客戶端只會向服務(wù)端傳遞三種數(shù)據(jù),分別是:

1忧换、屬性值(Attributes)

  • 就是一個對每個頂點(diǎn)都要做改變的數(shù)據(jù)元素恬惯。實(shí)際上,頂點(diǎn)位置本身就是一個屬性亚茬。屬性值可以使浮點(diǎn)數(shù)酪耳、整數(shù)或布爾數(shù)據(jù)。
  • 屬性總是以四維向量的形式進(jìn)行內(nèi)部存儲的刹缝,即使我們不會使用到所有4個分量碗暗。例如,一個頂點(diǎn)位置可能存儲為一個x值梢夯,一個y值和一個z值言疗,將占用4個分量中的3個。OpenGL會將第4個(w分量)設(shè)為1颂砸。實(shí)際上噪奄,如果我們在二維平面上面繪圖的話,那么第3個分量就會自動設(shè)為0人乓,第4個分量依舊設(shè)為1勤篮。
  • 屬性會從本地客戶端內(nèi)存中復(fù)制存儲在圖形硬件中的一個緩沖區(qū)上。這些屬性只供頂點(diǎn)著色器使用色罚,對于片元著色器來說沒有意義碰缔。
  • 這些屬性對每個頂點(diǎn)都要做改變,并不意味著他們的值不能重復(fù)保屯,而只是說明每個頂點(diǎn)都有一個實(shí)際存儲值手负。當(dāng)然,通常情況下他們都是不同的姑尺,但是也有可能會與整個數(shù)組都是同一個值得情況竟终。但是這種情況很浪費(fèi)。

2切蟋、Uniform值

  • Uniforms值本質(zhì)上跟屬性一樣统捶,但是跟屬性值不同的是,頂點(diǎn)著色器和片元著色器中都可以有Uniform變量柄粹。
  • 所謂屬性就是一個對每個頂點(diǎn)都要做改變的數(shù)據(jù)元素喘鸟。實(shí)際上,頂點(diǎn)位置本身就是一個屬性驻右。屬性是不變的什黑。
  • 我們通常設(shè)置完Uniform變量就緊接著發(fā)出渲染一個圖元批次的命令。Uniform實(shí)際上可以無次數(shù)限制的使用堪夭,我們可以設(shè)置一個應(yīng)用于整個表面的單個顏色值愕把,還可以設(shè)置一個時間值,在每次渲染某種類型的頂點(diǎn)動畫時修改它森爽。
  • Uniform變量一個常見的應(yīng)用是在頂點(diǎn)渲染中設(shè)置變換矩陣恨豁。

3、紋理數(shù)據(jù)(Texture Data)

  • 從頂點(diǎn)著色器和片元著色器中都可以對紋理值進(jìn)行采樣和篩選爬迟。典型情況下橘蜜,片元著色器對一個紋理進(jìn)行采樣,并在一個三角形的表面上應(yīng)用圖形數(shù)據(jù)付呕,但是计福,紋理數(shù)據(jù)的作用并不僅僅是表現(xiàn)圖形。很多圖形文件格式都是以無符號字節(jié)形式對顏色分量進(jìn)行存儲的徽职,但是我們?nèi)匀豢梢栽O(shè)置浮點(diǎn)紋理棒搜。
  • 任何大型浮點(diǎn)數(shù)據(jù)塊(例如消耗資源很大的函數(shù)的大型查詢表)都可以通過這種方式傳遞給著色器。

步驟:
1活箕、三個值都可以通過三個通道分別傳到頂點(diǎn)著色器中力麸,頂點(diǎn)著色器處理從客戶機(jī)輸入的數(shù)據(jù)、應(yīng)用變換育韩、進(jìn)行其他的類型的數(shù)學(xué)運(yùn)算來計(jì)算關(guān)照效果克蚂、位移、顏色值等等筋讨。(為了渲染共有3個頂點(diǎn)的三角形埃叭,頂點(diǎn)著色器將執(zhí)行3次,也就是為了每個頂點(diǎn)執(zhí)行一次)在目前的硬件上有多個執(zhí)行單元同時運(yùn)行悉罕,就意味著所有的3個頂點(diǎn)可以同時進(jìn)行處理赤屋;
2立镶、頂點(diǎn)著色器處理完成之后,就會經(jīng)過圖元合成类早,將頂點(diǎn)組合在一起變成圖元媚媒,然后裁剪、轉(zhuǎn)換窗口坐標(biāo)涩僻、進(jìn)行光柵化缭召;
3、接著將數(shù)據(jù)輸入到片元著色器逆日,計(jì)算片元最終顏色以及深度嵌巷,然后傳遞到片元測試模塊以及混合模塊,由片元著色器輸出我們將屏幕上看到的最終顏色值室抽。

注意:

  • Attributes屬性值是不能直接傳遞給片元著色器的搪哪,只能通過頂點(diǎn)著色器去傳遞。但是Uniforms和紋理數(shù)據(jù)是可以的坪圾。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末噩死,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子神年,更是在濱河造成了極大的恐慌已维,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件已日,死亡現(xiàn)場離奇詭異垛耳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)飘千,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門堂鲜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人护奈,你說我怎么就攤上這事缔莲。” “怎么了霉旗?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵痴奏,是天一觀的道長音同。 經(jīng)常有香客問我限府,道長,這世上最難降的妖魔是什么纸镊? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任鸵闪,我火速辦了婚禮檐晕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己辟灰,他們只是感情好个榕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芥喇,像睡著了一般西采。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乃坤,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天苛让,我揣著相機(jī)與錄音沟蔑,去河邊找鬼湿诊。 笑死,一個胖子當(dāng)著我的面吹牛瘦材,可吹牛的內(nèi)容都是我干的厅须。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼食棕,長吁一口氣:“原來是場噩夢啊……” “哼朗和!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起簿晓,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤眶拉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后憔儿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忆植,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年谒臼,在試婚紗的時候發(fā)現(xiàn)自己被綠了朝刊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜈缤,死狀恐怖拾氓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情底哥,我是刑警寧澤咙鞍,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站趾徽,受9級特大地震影響奶陈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜附较,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一吃粒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拒课,春花似錦徐勃、人聲如沸事示。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肖爵。三九已至,卻和暖如春臀脏,著一層夾襖步出監(jiān)牢的瞬間劝堪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工揉稚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秒啦,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓搀玖,卻偏偏與公主長得像余境,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子灌诅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

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

  • 本文首發(fā)于個人博客:Lam's Blog - 【OpenGL ES】入門及繪制一個三角形芳来,文章由MarkDown語...
    格子林ll閱讀 7,269評論 2 18
  • 想要學(xué)習(xí)OpenGL的渲染思想,就需要了解OpenGL中猜拾,圖片是怎么渲染到我們所看到的屏幕上的即舌,這個流程是需要知道...
    Daniel_Harvey閱讀 4,677評論 0 3
  • 渲染管線 蘋果提供了兩種OpenGL ES的可視化模型,一種是客戶端—服務(wù)端的架構(gòu)模型挎袜,另一種就是管線的模型顽聂。 客...
    sellse閱讀 12,135評論 1 10
  • 我們在工作中經(jīng)常聽到有人說“能者多勞”。對于那些“無能者”來說宋雏,這可能是他們調(diào)侃他人的一句話芜飘。因?yàn)樗麄儧]有能力,所...
    景琛閱讀 242評論 0 0
  • 羨慕記性好的人磨总,感覺干什么腦力活都不會費(fèi)勁嗦明,臨時抱抱佛腳就能分分鐘成仙。 我經(jīng)常夢到別人在修仙蚪燕,然后我躲在旁邊看娶牌,...
    酸奶小番茄閱讀 229評論 0 0