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)系饭玲,類似于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)用程序蓬痒。