版本記錄
版本號 | 時(shí)間 |
---|---|
V1.0 | 2017.09.28 |
前言
OpenGL ES是一個(gè)強(qiáng)大的圖形庫低零,是跨平臺的圖形API设捐,屬于OpenGL的一個(gè)簡化版本。iOS系統(tǒng)可以利用OpenGL ES將圖像數(shù)據(jù)直接送入到GPU進(jìn)行渲染拴竹,這樣避免了從CPU進(jìn)行計(jì)算再送到顯卡渲染帶來的性能的高消耗晦款,能帶來來更好的視頻效果和用戶體驗(yàn)。接下來幾篇就介紹下iOS 系統(tǒng)的 OpenGL ES框架凤薛。感興趣的可以看上面幾篇挥萌。
1. OpenGL ES 框架詳細(xì)解析(一) —— 基本概覽
關(guān)于OpenGL ES
可以參考參考文檔
開放圖形庫(OpenGL)用于2D和3D數(shù)據(jù)的可視化。 它是一個(gè)多功能的開放標(biāo)準(zhǔn)圖形庫枉侧,支持2D和3D數(shù)字內(nèi)容創(chuàng)建引瀑,機(jī)械和建筑設(shè)計(jì),虛擬原型榨馁,飛行模擬憨栽,視頻游戲等應(yīng)用。 您可以使用OpenGL配置3D圖形管道并提交數(shù)據(jù)翼虫。 頂點(diǎn)被變換和點(diǎn)亮屑柔,組裝成圖元,并進(jìn)行光柵化以創(chuàng)建2D圖像珍剑。 OpenGL旨在將函數(shù)調(diào)用轉(zhuǎn)換為可發(fā)送到底層圖形硬件的圖形命令掸宛。 因?yàn)檫@個(gè)底層硬件專門用于處理圖形命令,因此OpenGL繪圖通常非痴凶荆快唧瘾。
用于嵌入式系統(tǒng)的OpenGL(OpenGL ES)是OpenGL的簡化版本,可以消除冗余功能别凤,從而為移動圖形硬件提供更容易學(xué)習(xí)和更易于實(shí)現(xiàn)的庫饰序。
概覽
OpenGL ES允許應(yīng)用程序利用底層圖形處理器的功能。 iOS設(shè)備上的GPU可以執(zhí)行復(fù)雜的2D和3D繪圖规哪,以及最終圖像中每個(gè)像素的復(fù)雜陰影計(jì)算求豫。 您應(yīng)該使用OpenGL ES,如果您的應(yīng)用程序的設(shè)計(jì)要求調(diào)用可直接和全面訪問GPU硬件。 OpenGL ES的典型客戶端包括提供3D圖形的視頻游戲和模擬蝠嘉。
OpenGL ES是一個(gè)低級的最疆,以硬件為重點(diǎn)的API。 雖然它提供了最強(qiáng)大和靈活的圖形處理工具蚤告,但它也具有陡峭的學(xué)習(xí)曲線努酸,對您的應(yīng)用程序的整體設(shè)計(jì)有重大影響。 對于需要高性能圖形用于更專業(yè)化應(yīng)用的應(yīng)用罩缴,iOS提供了幾個(gè)更高級別的框架:
-
Sprite Kit
框架提供了一個(gè)優(yōu)化用于創(chuàng)建2D游戲的硬件加速動畫系統(tǒng)。 (請參閱Sprite Kit Programming Guide
层扶。) -
Core Image
框架為靜態(tài)和視頻圖像提供實(shí)時(shí)過濾和分析箫章。 (見Core Image Programming Guide) -
Core Animation
為所有iOS應(yīng)用程序提供硬件加速的圖形渲染和動畫基礎(chǔ)設(shè)施,以及一個(gè)簡單的聲明式編程模型镜会,使實(shí)現(xiàn)復(fù)雜的用戶界面動畫變得簡單檬寂。 (見Core Animation Programming Guide) - 您可以使用
UIKit
框架中的功能向Cocoa Touch用戶界面添加基于物理的動畫和其他特效。
1. OpenGL ES Is a Platform-Neutral API Implemented in iOS - OpenGL ES是iOS中實(shí)現(xiàn)的平臺中立API
因?yàn)镺penGL ES是一個(gè)基于C的API戳表,它非常便于攜帶并得到廣泛的支持桶至。 作為C API,它與Objective-C Cocoa Touch
應(yīng)用程序無縫集成匾旭。 OpenGL ES規(guī)范沒有定義窗口層; 而是镣屹,主機(jī)操作系統(tǒng)必須提供函數(shù)來創(chuàng)建OpenGL ES渲染上下文,該接口接受命令价涝,而幀緩沖區(qū)則將繪制任何繪圖命令的結(jié)果女蜈。 在iOS上使用OpenGL ES需要使用iOS類來設(shè)置和呈現(xiàn)繪圖表面,并使用平臺中立的API來呈現(xiàn)其內(nèi)容色瘩。
相關(guān)參考:Checklist for Building OpenGL ES Apps for iOS, Configuring OpenGL ES Contexts
2. GLKit Provides a Drawing Surface and Animation Support - GLKit提供繪圖表面和動畫支持
UIKit框架定義的視圖和視圖控制器可以控制iOS上的視覺內(nèi)容的呈現(xiàn)伪窖。 GLKit框架提供這些類的OpenGL ES
感知版本。 當(dāng)您開發(fā)OpenGL ES應(yīng)用程序時(shí)居兆,您可以使用GLKView
對象來呈現(xiàn)OpenGL ES內(nèi)容覆山。 您還可以使用GLKViewController
對象來管理視圖并支持動畫化其內(nèi)容。
相關(guān)參考:Drawing with OpenGL ES and GLKit
3. iOS Supports Alternative Rendering Targets - iOS支持可選渲染目標(biāo)
除了繪制內(nèi)容以填充整個(gè)屏幕或視圖層次結(jié)構(gòu)的一部分外泥栖,您還可以使用OpenGL ES幀緩沖區(qū)對象進(jìn)行其他渲染策略簇宽。 iOS實(shí)現(xiàn)標(biāo)準(zhǔn)的OpenGL ES幀緩沖對象,您可以將其用于渲染到屏幕外緩沖區(qū)或紋理吧享,以便在OpenGL ES場景中的其他位置使用晦毙。 此外,iOS上的OpenGL ES支持渲染到Core Animation
層(CAEAGLLayer
類)耙蔑,然后您可以將其與其他圖層結(jié)合见妒,構(gòu)建應(yīng)用的用戶界面或其他視覺顯示
相關(guān)參考:Drawing to Other Rendering Destinations
4. Apps Require Additional Performance Tuning - 應(yīng)用程序需要額外的性能調(diào)優(yōu)
圖形處理器是針對圖形操作優(yōu)化的并行化設(shè)備。 為了在應(yīng)用程序中獲得出色的表現(xiàn),您必須仔細(xì)設(shè)計(jì)應(yīng)用程序以將數(shù)據(jù)和命令提供給OpenGL ES须揣,以便圖形硬件與您的應(yīng)用程序并行運(yùn)行盐股。 調(diào)整不當(dāng)?shù)膽?yīng)用程序會強(qiáng)制CPU或GPU等待另一個(gè)完成處理命令。
您應(yīng)該設(shè)計(jì)您的app以有效地使用OpenGL ES API耻卡。 一旦你完成app疯汁,請使用Instruments
來調(diào)整應(yīng)用程式的成效。 如果您的應(yīng)用程序在OpenGL ES中出現(xiàn)瓶頸卵酪,請使用本指南中提供的信息來優(yōu)化應(yīng)用程序的性能幌蚊。
Xcode提供了幫助您提高OpenGL ES應(yīng)用程序性能的工具。
相關(guān)參考:OpenGL ES Design Guidelines, Best Practices for Working with Vertex Data, Best Practices for Working with Texture Data, Best Practices for Shaders, Tuning Your OpenGL ES App
5. OpenGL ES May Not Be Used in Background Apps - OpenGL ES可能不會用于后臺應(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)參考:Multitasking, High Resolution, and Other iOS Features
6. OpenGL ES Places Additional Restrictions on Multithreaded Apps - OpenGL ES為多線程應(yīng)用程序添加了其他限制
設(shè)計(jì)應(yīng)用程序以利用并發(fā)功能可以幫助您提高應(yīng)用程序的性能。 如果您打算在OpenGL ES應(yīng)用程序中添加并發(fā)性峻村,則必須確保它不會同時(shí)從兩個(gè)不同的線程訪問相同的上下文麸折。
相關(guān)參考:Concurrency and OpenGL ES
學(xué)習(xí)規(guī)劃進(jìn)程
開始的時(shí)候讀這三篇文章:Checklist for Building OpenGL ES Apps for iOS, Configuring OpenGL ES Contexts, Drawing with OpenGL ES and GLKit。這些章節(jié)概述了OpenGL ES如何整合到iOS中粘昨,以及在iOS設(shè)備上啟動和運(yùn)行第一個(gè)OpenGL ES應(yīng)用程序所需的所有細(xì)節(jié)磕谅。
如果你熟悉了iOS中OpenGL ES的基本用法,對于重要的平臺指南需要讀Drawing to Other Rendering Destinations 和 Multitasking, High Resolution, and Other iOS Features雾棺,熟悉在5.0之前的iOS版本中使用OpenGL ES的開發(fā)人員應(yīng)該研究使用OpenGL ES和GLKit繪圖膊夹,了解有關(guān)簡化OpenGL ES開發(fā)的新功能的詳細(xì)信息
最后需要讀OpenGL ES Design Guidelines, Tuning Your OpenGL ES App,以下章節(jié)深入了解如何設(shè)計(jì)高效的OpenGL ES應(yīng)用程序捌浩。除非另有說明放刨,本書中的OpenGL ES代碼示例以
OpenGL ES 3.0
為目標(biāo)。 您可能需要進(jìn)行更改以使用其他OpenGL ES版本的代碼示例尸饺。
其他參考
OpenGL ES是由Khronos集團(tuán)定義的開放標(biāo)準(zhǔn)进统。 有關(guān)OpenGL ES標(biāo)準(zhǔn)的更多信息,請參閱其網(wǎng)頁http://www.khronos.org/opengles/浪听。
-
Addison-Wesley
發(fā)布的OpenGL? ES 3.0 Programming Guide
全面介紹了OpenGL ES的概念螟碎。 -
OpenGL? Shading Language, Third Edition
,也由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中提供的平臺特定函數(shù)和類华坦。 - iOS Device Compatibility Reference提供了有關(guān)您的應(yīng)用程序可用的硬件和軟件功能的更多詳細(xì)信息。
-
GLKit Framework Reference
介紹了由Apple提供的一個(gè)框架不从,可以更輕松地開發(fā)OpenGL ES 2.0和3.0應(yīng)用程序惜姐。
參考文章
1. OpenGLES渲染管道,頂點(diǎn)著色器(VertexShader) 椿息,片元著色器(FragmentShader)
后記
未完歹袁,待續(xù)~~~