OpenGL ES Programming Guide(1)

Introduction

本文是蘋果官方文檔的翻譯翰意,由于本人水平有限常侣,文中難免有錯漏之處,請批評指正诉儒。原文鏈接

關(guān)于OpenGL ES

開放圖形庫(Open Graphics Library:OpenGL) 被用來展示2D和3D數(shù)據(jù),它是一個多用途的開放標(biāo)準(zhǔn)圖形庫亏掀,支持2D、3D數(shù)字內(nèi)容的創(chuàng)建泛释,機(jī)械和建筑設(shè)計滤愕、虛擬原型、飛行模擬怜校、視頻游戲等多種應(yīng)用间影。您可以使用OpenGL配置3D圖形管線并提交數(shù)據(jù)。頂點(diǎn)被轉(zhuǎn)換和點(diǎn)亮茄茁,組成原始圖像魂贬,進(jìn)行光柵化后生成2D圖像。OpenGL旨在將函數(shù)調(diào)用轉(zhuǎn)換為可發(fā)送到底層圖形硬件的圖形命令裙顽,該底層硬件專門用于處理圖形命令付燥,因此OpenGL繪圖通常非常快愈犹。
OpenGL for Embedded Systems(OpenGL ES)是OpenGL的簡化版本(專門為嵌入式系統(tǒng)設(shè)計键科,在移動端操作系統(tǒng)中應(yīng)用廣泛),該版本消除了冗余功能漩怎,提供了更易學(xué)習(xí)且易于在移動圖形硬件中實(shí)現(xiàn)的庫勋颖。


CPU和GPU關(guān)系圖
譯者:
由上圖可知,CPU勋锤、GPU之間的關(guān)系饭玲,類似于C/S模式,其中CPU相當(dāng)于Client叁执,GPU相當(dāng)于Server茄厘,當(dāng)應(yīng)用需
要圖形的繪制以及渲染時,它會通過OpenGL ES框架徒恋,向GPU傳輸相應(yīng)繪制指令(類似于client發(fā)起的請求)蚕断,
GPU收到指令后會進(jìn)行相應(yīng)操作(類似于Server對請求進(jìn)行響應(yīng)),最終將渲染結(jié)果在屏幕上繪制出來入挣。

概覽

OpenGL ES允許應(yīng)用程序利用底層圖形處理器的功能亿乳。 iOS設(shè)備上的GPU可以執(zhí)行復(fù)雜的2D和3D繪圖,并對最終圖像中的每個像素進(jìn)行復(fù)雜的陰影計算。 如果應(yīng)用程序的設(shè)計需求需要盡可能直接全面的訪問GPU硬件葛假,那么你應(yīng)該使用OpenGL ES障陶。 OpenGL ES的典型客戶端包括可以展現(xiàn)3D圖形的視頻游戲和模擬游戲。
OpenGL ES是一個底層的聊训,以硬件為重點(diǎn)的API抱究。盡管它提供了強(qiáng)大和靈活的圖形處理工具,但也具有陡峭的學(xué)習(xí)曲線带斑,并且會對您應(yīng)用程序的整體設(shè)計有重大影響鼓寺。對于那些需要較高圖形性能的專業(yè)應(yīng)用,iOS提供了幾個更高層次的框架:

  • Sprite Kit框架提供了一個為創(chuàng)建2D游戲而優(yōu)化的硬件加速動畫系統(tǒng)勋磕。(請參見Sprite Kit編程指南)
  • Core Image框架為靜態(tài)的物體以及視頻圖像提供實(shí)時的過濾和分析妈候。請參閱核心圖像編程指南
  • 核心動畫為所有的的iOS應(yīng)用提供了硬件加速的圖形動畫渲染設(shè)施,以及一個簡單的聲明式編程模型挂滓,使得實(shí)現(xiàn)復(fù)雜的用戶界面動畫變得更加簡單苦银。請參閱核心動畫編程指南
  • 您可以使用UIKit框架中的功能,向Cocoa Touch用戶界面添加基于物理的動畫和其他特效赶站。

OpenGL ES是實(shí)現(xiàn)在iOS上的一個中立平臺API

因?yàn)镺penGL ES是一個基于C的API幔虏,它非常輕便并得到廣泛的支持。 作為一個C API贝椿,它可以與Objective-C Cocoa Touch應(yīng)用無縫集成想括。 OpenGL ES規(guī)范沒有定義窗口層,相反烙博,托管操作系統(tǒng)必須提供函數(shù)來創(chuàng)建可以接受命令的OpenGL ES渲染上下文以及可寫入任何繪圖命令的結(jié)果的幀緩沖區(qū)主胧。 在iOS上使用OpenGL ES需要使用iOS類來設(shè)置和呈現(xiàn)繪畫層,并使用平臺中立的API來渲染其中的內(nèi)容习勤。
相關(guān)章節(jié):構(gòu)建用于iOS的OpenGL ES應(yīng)用程序清單踪栋,配置OpenGL ES上下文

GLKit提供繪圖表面和動畫支持

UIKit框架定義的視圖和視圖控制器控制著iOS上視覺內(nèi)容的呈現(xiàn)。 GLKit框架提供了這些類的OpenGL ES感知版本图毕。 開發(fā)OpenGL ES應(yīng)用程序時夷都,您可以使用GLKView對象來呈現(xiàn)OpenGL ES內(nèi)容。 您還可以使用GLKViewController對象來管理視圖并支持可動畫化的內(nèi)容予颤。
相關(guān)章節(jié):用OpenGL ES和GLKit繪圖

iOS支持額外的渲染目標(biāo)

除了繪制內(nèi)容填充整個屏幕或視圖層次結(jié)構(gòu)的某一部分外囤官,您還可以使用OpenGL ES的幀緩沖對象進(jìn)行其他渲染策略。 iOS實(shí)現(xiàn)了標(biāo)準(zhǔn)的OpenGL ES幀緩沖對象蛤虐,您也可以將其用于渲染到屏幕外的緩沖區(qū)或者紋理党饮,以便在OpenGL ES場景中的其他位置使用。 此外驳庭,iOS上的OpenGL ES支持渲染到Core Animation層(CAEAGLLayer類)刑顺,然后您可以將其與其他圖層相結(jié)合氯窍,構(gòu)建用戶界面或其他視覺顯示。
相關(guān)章節(jié):繪制其他渲染區(qū)域

應(yīng)用程序需要額外的性能調(diào)優(yōu)

圖形處理器是針對圖形操作優(yōu)化的并行設(shè)備蹲堂。為了在您的應(yīng)用程序中獲得出色的性能狼讨,您必須仔細(xì)設(shè)計應(yīng)用程序以將數(shù)據(jù)和命令提供給OpenGL ES柒竞,以使圖形硬件與您的應(yīng)用程序并行運(yùn)行。一個協(xié)調(diào)性差的應(yīng)用程序會強(qiáng)制CPU或GPU等待另一個完成處理命令布隔。
您應(yīng)該以高效地使用OpenGL ES API的方式來設(shè)計您的應(yīng)用执泰,完成應(yīng)用制作后,使用Instruments來調(diào)整應(yīng)用性能茸苇。如果您的應(yīng)用在OpenGL ES中出現(xiàn)瓶頸沦寂,請使用本指南中提供的信息來優(yōu)化應(yīng)用性能传藏。
Xcode提供了幫助您提高OpenGL ES程序性能的工具毯侦。
相關(guān)章節(jié):OpenGL ES設(shè)計指南侈离,使用頂點(diǎn)數(shù)據(jù)的最佳實(shí)踐使用紋理數(shù)據(jù)的最佳實(shí)踐铺坞,著色器的最佳實(shí)踐济榨,調(diào)整您的OpenGL ES應(yīng)用程序

OpenGL ES可能不會在后臺運(yùn)行的應(yīng)用中使用

在后臺運(yùn)行的應(yīng)用可能不會調(diào)用OpenGL ES函數(shù)擒滑。如果您的應(yīng)用在后臺訪問圖形處理器,iOS會自動終止它赴魁。為避免這種情況钝诚,您的應(yīng)用應(yīng)該先刷新之前提交給OpenGL ES的命令凝颇,然后才能移動到后臺拧略,并避免調(diào)用OpenGL ES,直到它移回前臺禽最。
相關(guān)章節(jié):多任務(wù)川无,高分辨率和其他iOS功能

OpenGL ES為多線程應(yīng)用增加了額外限制

利用并發(fā)性設(shè)計應(yīng)用程序?qū)τ诟纳茟?yīng)用的性能很有幫助懦趋。如果你打算在一個OpenGL ES的應(yīng)用中使用并發(fā)仅叫,必須確保兩個不同的線程無法同時訪問同一個上下文诫咱。
相關(guān)章節(jié):并發(fā)和OpenGL ES

如何使用本文檔

首先閱讀前三章:構(gòu)建用于iOS的OpenGL ES應(yīng)用程序的清單遂跟,配置OpenGL ES上下文幻锁,使用OpenGL ES和GLKit進(jìn)行繪圖哄尔。這些章節(jié)講述了OpenGL ES如何整合到iOS中柠并,以及在iOS設(shè)備上啟動和運(yùn)行第一個OpenGL ES應(yīng)用程序所需的所有細(xì)節(jié)。
如果您熟悉在iOS中使用OpenGL ES的基礎(chǔ)知識啃沪,請閱讀繪制到其他渲染區(qū)多任務(wù)创千、高分辨率追驴、其他iOS功能殿雪,以獲取重要的特定平臺指南锋爪。熟悉在5.0之前的iOS版本中使用OpenGL ES的開發(fā)人員應(yīng)該學(xué)習(xí)使用OpenGL ES和GLKit繪圖其骄,以獲得有關(guān)簡化OpenGL ES開發(fā)以及新功能的詳細(xì)信息。
最后薄霜,閱讀OpenGL ES設(shè)計指南惰瓜,調(diào)整OpenGL ES應(yīng)用以及以下章節(jié)崎坊,深入了解如何設(shè)計高效的OpenGL ES應(yīng)用程序奈揍。
除非另有說明男翰,本書中的OpenGL ES代碼示例以O(shè)penGL ES 3.0為標(biāo)準(zhǔn)蛾绎。如果將它們用在其它的OpenGL ES版本,您可能需要改變列子中的代碼薯嗤。

先決條件

在嘗試使用OpenGL ES之前骆姐,您應(yīng)該已經(jīng)熟悉了一般的iOS應(yīng)用程序架構(gòu)诲锹。 請參閱Start Developing iOS Apps Today归园。
本文檔不是完整的教程或跨平臺OpenGL ES API的參考。 要了解有關(guān)OpenGL ES的更多信息晤揣,請參閱以下參考钠四。

也可以看看

OpenGL ES是Khronos集團(tuán)定義的開源標(biāo)準(zhǔn)缀去。 有關(guān)OpenGL ES標(biāo)準(zhǔn)的更多信息缕碎,請?jiān)L問http://www.khronos.org/opengles/

  • Addison-Wesley發(fā)布的OpenGL?ES 3.0編程指南全面介紹了OpenGL ES的概念赊抖。
  • OpenGL?著色語言熏迹,第三版坛缕,也由Addison-Wesley出版赚楚,提供了許多可用于OpenGL ES應(yīng)用的著色算法宠页。 您可能需要修改其中一些算法才能在移動圖形處理器上高效運(yùn)行。
  • OpenGL ES API Registry是OpenGL ES規(guī)范的官方存儲庫俭嘁,OpenGL ES著色語言規(guī)范以及OpenGL ES擴(kuò)展的文檔。
  • OpenGL ES Framework Reference介紹了Apple將OpenGL ES集成到iOS中提供的平臺特定功能和類近她。
  • iOS Device Compatibility Reference提供了有關(guān)您的應(yīng)用程序可用的硬件和軟件功能的更詳細(xì)信息。
  • GLKit框架參考描述由Apple提供的一個框架攒磨,使用它我們可以更輕松地開發(fā)OpenGL ES 2.0和3.0應(yīng)用程序蓬痒。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市趋惨,隨后出現(xiàn)的幾起案子讯嫂,更是在濱河造成了極大的恐慌,老刑警劉巖千扔,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褥符,死亡現(xiàn)場離奇詭異载迄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門婿屹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事∽嫫粒” “怎么了助赞?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵买羞,是天一觀的道長。 經(jīng)常有香客問我雹食,道長哩都,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任婉徘,我火速辦了婚禮漠嵌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盖呼。我一直安慰自己儒鹿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布几晤。 她就那樣靜靜地躺著约炎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蟹瘾。 梳的紋絲不亂的頭發(fā)上圾浅,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機(jī)與錄音憾朴,去河邊找鬼狸捕。 笑死,一個胖子當(dāng)著我的面吹牛众雷,可吹牛的內(nèi)容都是我干的灸拍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼砾省,長吁一口氣:“原來是場噩夢啊……” “哼鸡岗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起编兄,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤轩性,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后狠鸳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揣苏,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年碰煌,在試婚紗的時候發(fā)現(xiàn)自己被綠了舒岸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绅作。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡芦圾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出俄认,到底是詐尸還是另有隱情个少,我是刑警寧澤洪乍,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站夜焦,受9級特大地震影響壳澳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茫经,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一巷波、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卸伞,春花似錦抹镊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至遂黍,卻和暖如春终佛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背雾家。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工铃彰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芯咧。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓豌研,卻偏偏與公主長得像,于是被迫代替她去往敵國和親唬党。 傳聞我的和親對象是個殘疾皇子鹃共,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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