[9].專屬M(fèi)obile的OpenGL-OpenGL-ES

跳去目錄


OpenGL-ES (OpenGL for Embedded Systems)

作為OpenGL的子集肿轨,OpenGL-ES專為移動(dòng)端的圖像顯示而生端盆,其針對(duì)于手機(jī)等嵌入式設(shè)備所進(jìn)行了定制與優(yōu)化闪唆,使移動(dòng)端的設(shè)備圖像加載更高效,3D圖像的渲染更快速,質(zhì)量更高


渲染模塊

同桌面端設(shè)備一樣饱苟,移動(dòng)端OpenGL-ES的渲染也是由CPUGPU協(xié)同完成的,CPU負(fù)責(zé)調(diào)動(dòng)OpenGL模塊编矾,并將頂點(diǎn)數(shù)據(jù)由內(nèi)存中取出并傳入GPU中熟史,GPU負(fù)責(zé)將頂點(diǎn)數(shù)據(jù)進(jìn)行處理,并執(zhí)行渲染操作窄俏。


渲染流程

OpenGL-ES渲染流程

頂點(diǎn)著色器

- 通過(guò)`attribute通道`負(fù)責(zé)接收`CPU`傳遞來(lái)的頂點(diǎn)信息(在iOS中蹂匹,為了穩(wěn)定性,默認(rèn)將attribute通道關(guān)閉)
- 通過(guò)`uniform通道`統(tǒng)一變量凹蜈,并進(jìn)行后續(xù)處理
- 通過(guò)`采集器`來(lái)對(duì)`紋理`進(jìn)行處理
- 通過(guò)GLSL內(nèi)建變量限寞,將頂點(diǎn)數(shù)據(jù)處理成需要的形式(`gl_Position`),并使用
- 通過(guò)特定語(yǔ)法仰坦,修改點(diǎn)的大小
- 通過(guò)矩陣變換履植,獲取真正坐標(biāo)
- 計(jì)算光照信息
- 生成紋理坐標(biāo)并傳遞給片元著色器

圖元裝配

計(jì)算頂點(diǎn)信息,將`頂點(diǎn)數(shù)據(jù)`計(jì)算為多個(gè)`圖元`

光柵化

將`圖元`轉(zhuǎn)換為`片段`悄晃,為后續(xù)`片元著色器`的工作做準(zhǔn)備

片元著色器

- 通過(guò)uniform通道統(tǒng)一變量玫霎,以便于后續(xù)處理
- 接收頂點(diǎn)著色器傳遞來(lái)的`紋理坐標(biāo)`,計(jì)算紋理坐標(biāo)的填充顏色妈橄,并對(duì)紋理坐標(biāo)的像素點(diǎn)進(jìn)行顏色填充

逐片段操作

逐片段操作

? 逐片段操作是由OpenGL-ES內(nèi)部所完成的庶近,其最終將圖像數(shù)據(jù)放到幀緩沖區(qū),顯示于屏幕上


EGL(Embedded Graphics Library)

EGL

針對(duì)于移動(dòng)端眷蚓,OpenGL-ES需要設(shè)定新的命令來(lái)鏈接窗口拦盹,因此需要一個(gè)新的庫(kù)來(lái)執(zhí)行這個(gè)操作,這個(gè)庫(kù)就是EGL, EGL 是OpenGL-ES 和原?窗?系統(tǒng)之間的接口

EAGL

? 出于Apple一貫精益求精的精神溪椎,apple當(dāng)然不滿足EGL的效率普舆,因此apple自己研發(fā)了一個(gè)庫(kù)用于替代EGL,這個(gè)庫(kù)就是EAGL


GLSL(OpenGL著色器語(yǔ)言)

著色器

著色器是使用一種叫GLSL的類C語(yǔ)言寫成的校读。GLSL是為圖形計(jì)算量身定制的沼侣,它包含一些針對(duì)向量和矩陣操作的有用特性。

著色器的開頭總是要聲明版本歉秫,接著是輸入和輸出變量蛾洛、uniform和main函數(shù)。每個(gè)著色器的入口點(diǎn)都是main函數(shù)雁芙,在這個(gè)函數(shù)中我們處理所有的輸入變量轧膘,并將結(jié)果輸出到輸出變量中。

向量

GLSL中的向量是一個(gè)可以包含有1兔甘、2谎碍、3或者4個(gè)分量的容器,分量的類型可以是前面默認(rèn)基礎(chǔ)類型的任意一個(gè)洞焙。它們可以是下面的形式(n代表分量的數(shù)量):

類型 含義
vec n 包含n個(gè)float分量的默認(rèn)向量
bvec n 包含n個(gè)bool分量的向量
ivec n 包含n個(gè)int分量的向量
uvec n 包含n個(gè)unsigned int分量的向量
dvec n 包含n個(gè)double分量的向量

向量重組

一個(gè)向量的分量可以通過(guò)vec.x這種方式獲取蟆淀,這里x是指這個(gè)向量的第一個(gè)分量拯啦。你可以分別使用.x、.y熔任、.z和.w來(lái)獲取它們的第1褒链、2、3疑苔、4個(gè)分量甫匹。GLSL也允許你對(duì)顏色使用rgba,或是對(duì)紋理坐標(biāo)使用stpq訪問(wèn)相同的分量惦费。

vec2 someVec;
vec4 differentVec = someVec.xyxx;
vec3 anotherVec = differentVec.zyw;
vec4 otherVec = someVec.xxxx + anotherVec.yxzy;

輸入輸出 in out

著色器是各自獨(dú)立的小程序, 它們都是一個(gè)整體的一部分,每個(gè)著色器都有特定的輸入和輸出兵迅,這樣使它們可以進(jìn)行數(shù)據(jù)交流及傳遞。GLSL定義了in和out關(guān)鍵字專門來(lái)實(shí)現(xiàn)這個(gè)目的趁餐。每個(gè)著色器使用這兩個(gè)關(guān)鍵字設(shè)定輸入和輸出,只要一個(gè)輸出變量與下一個(gè)著色器階段的輸入匹配篮绰,它就會(huì)傳遞下去后雷。

如果我們需要從一個(gè)著色器向另一個(gè)著色器發(fā)送數(shù)據(jù),我們必須在發(fā)送方著色器中聲明一個(gè)輸出吠各,在接收方著色器中聲明一個(gè)類似的輸入臀突。當(dāng)類型和名字都一樣的時(shí)候,OpenGL就會(huì)把兩個(gè)變量鏈接到一起贾漏,它們之間就能發(fā)送數(shù)據(jù)了(這是在鏈接程序?qū)ο髸r(shí)完成的)候学。

varying uniform attribute

varying變量是 vertex shaderfragment shader 之間做數(shù)據(jù)傳遞用的。一般 vertex shader 修改 varying 變量的值纵散,然后 fragment shader 使用該 varying 變量的值梳码。因此 varying 變量在 vertex shaderfragment shader 二者之間的聲明必須是一致的。

uniform 變量是外部程序傳遞給 vertex shader fragment shader 的變量伍掀。

attribute變量是只能在 vertex shader中使用的變量掰茶。


跳去目錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蜜笤,隨后出現(xiàn)的幾起案子濒蒋,更是在濱河造成了極大的恐慌,老刑警劉巖把兔,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沪伙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡县好,警方通過(guò)查閱死者的電腦和手機(jī)围橡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)缕贡,“玉大人某饰,你說(shuō)我怎么就攤上這事儒恋。” “怎么了黔漂?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵诫尽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我炬守,道長(zhǎng)牧嫉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任减途,我火速辦了婚禮酣藻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鳍置。我一直安慰自己辽剧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布税产。 她就那樣靜靜地躺著怕轿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辟拷。 梳的紋絲不亂的頭發(fā)上撞羽,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音衫冻,去河邊找鬼诀紊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛隅俘,可吹牛的內(nèi)容都是我干的邻奠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼为居,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼惕澎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起颜骤,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤唧喉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后忍抽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體八孝,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年鸠项,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了干跛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡祟绊,死狀恐怖楼入,靈堂內(nèi)的尸體忽然破棺而出哥捕,到底是詐尸還是另有隱情,我是刑警寧澤嘉熊,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布遥赚,位于F島的核電站,受9級(jí)特大地震影響阐肤,放射性物質(zhì)發(fā)生泄漏凫佛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一孕惜、第九天 我趴在偏房一處隱蔽的房頂上張望愧薛。 院中可真熱鬧,春花似錦衫画、人聲如沸毫炉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瞄勾。三九已至,卻和暖如春鲸郊,著一層夾襖步出監(jiān)牢的瞬間丰榴,已是汗流浹背货邓。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工秆撮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人换况。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓职辨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親戈二。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舒裤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348