OpenGL ES 框架詳細解析(二) —— 關于OpenGL ES

版本記錄

版本號 時間
V1.0 2017.09.28

前言

OpenGL ES是一個強大的圖形庫,是跨平臺的圖形API,屬于OpenGL的一個簡化版本。iOS系統可以利用OpenGL ES將圖像數據直接送入到GPU進行渲染,這樣避免了從CPU進行計算再送到顯卡渲染帶來的性能的高消耗,能帶來來更好的視頻效果和用戶體驗。接下來幾篇就介紹下iOS 系統的 OpenGL ES框架。感興趣的可以看上面幾篇。
1. OpenGL ES 框架詳細解析(一) —— 基本概覽

關于OpenGL ES

可以參考參考文檔

開放圖形庫(OpenGL)用于2D和3D數據的可視化。 它是一個多功能的開放標準圖形庫,支持2D和3D數字內容創建,機械和建筑設計,虛擬原型,飛行模擬,視頻游戲等應用。 您可以使用OpenGL配置3D圖形管道并提交數據。 頂點被變換和點亮,組裝成圖元,并進行光柵化以創建2D圖像。 OpenGL旨在將函數調用轉換為可發送到底層圖形硬件的圖形命令。 因為這個底層硬件專門用于處理圖形命令,因此OpenGL繪圖通常非常快。

用于嵌入式系統的OpenGL(OpenGL ES)是OpenGL的簡化版本,可以消除冗余功能,從而為移動圖形硬件提供更容易學習和更易于實現的庫。


概覽

OpenGL ES允許應用程序利用底層圖形處理器的功能。 iOS設備上的GPU可以執行復雜的2D和3D繪圖,以及最終圖像中每個像素的復雜陰影計算。 您應該使用OpenGL ES,如果您的應用程序的設計要求調用可直接和全面訪問GPU硬件。 OpenGL ES的典型客戶端包括提供3D圖形的視頻游戲和模擬。

OpenGL ES是一個低級的,以硬件為重點的API。 雖然它提供了最強大和靈活的圖形處理工具,但它也具有陡峭的學習曲線,對您的應用程序的整體設計有重大影響。 對于需要高性能圖形用于更專業化應用的應用,iOS提供了幾個更高級別的框架:

  • Sprite Kit框架提供了一個優化用于創建2D游戲的硬件加速動畫系統。 (請參閱Sprite Kit Programming Guide。)
  • Core Image框架為靜態和視頻圖像提供實時過濾和分析。 (見Core Image Programming Guide)
  • Core Animation為所有iOS應用程序提供硬件加速的圖形渲染和動畫基礎設施,以及一個簡單的聲明式編程模型,使實現復雜的用戶界面動畫變得簡單。 (見Core Animation Programming Guide
  • 您可以使用UIKit框架中的功能向Cocoa Touch用戶界面添加基于物理的動畫和其他特效。

1. OpenGL ES Is a Platform-Neutral API Implemented in iOS - OpenGL ES是iOS中實現的平臺中立API

因為OpenGL ES是一個基于C的API,它非常便于攜帶并得到廣泛的支持。 作為C API,它與Objective-C Cocoa Touch應用程序無縫集成。 OpenGL ES規范沒有定義窗口層; 而是,主機操作系統必須提供函數來創建OpenGL ES渲染上下文,該接口接受命令,而幀緩沖區則將繪制任何繪圖命令的結果。 在iOS上使用OpenGL ES需要使用iOS類來設置和呈現繪圖表面,并使用平臺中立的API來呈現其內容。

相關參考:Checklist for Building OpenGL ES Apps for iOS, Configuring OpenGL ES Contexts

2. GLKit Provides a Drawing Surface and Animation Support - GLKit提供繪圖表面和動畫支持

UIKit框架定義的視圖和視圖控制器可以控制iOS上的視覺內容的呈現。 GLKit框架提供這些類的OpenGL ES感知版本。 當您開發OpenGL ES應用程序時,您可以使用GLKView對象來呈現OpenGL ES內容。 您還可以使用GLKViewController對象來管理視圖并支持動畫化其內容。

相關參考:Drawing with OpenGL ES and GLKit

3. iOS Supports Alternative Rendering Targets - iOS支持可選渲染目標

除了繪制內容以填充整個屏幕或視圖層次結構的一部分外,您還可以使用OpenGL ES幀緩沖區對象進行其他渲染策略。 iOS實現標準的OpenGL ES幀緩沖對象,您可以將其用于渲染到屏幕外緩沖區或紋理,以便在OpenGL ES場景中的其他位置使用。 此外,iOS上的OpenGL ES支持渲染到Core Animation層(CAEAGLLayer類),然后您可以將其與其他圖層結合,構建應用的用戶界面或其他視覺顯示

相關參考:Drawing to Other Rendering Destinations

4. Apps Require Additional Performance Tuning - 應用程序需要額外的性能調優

圖形處理器是針對圖形操作優化的并行化設備。 為了在應用程序中獲得出色的表現,您必須仔細設計應用程序以將數據和命令提供給OpenGL ES,以便圖形硬件與您的應用程序并行運行。 調整不當的應用程序會強制CPU或GPU等待另一個完成處理命令。

您應該設計您的app以有效地使用OpenGL ES API。 一旦你完成app,請使用Instruments來調整應用程式的成效。 如果您的應用程序在OpenGL ES中出現瓶頸,請使用本指南中提供的信息來優化應用程序的性能。

Xcode提供了幫助您提高OpenGL ES應用程序性能的工具。

相關參考: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可能不會用于后臺應用程序

在后臺運行的應用程序可能不會調用OpenGL ES函數。 如果您的應用程序在后臺訪問圖形處理器,則會由iOS自動終止。 為了避免這種情況,您的應用程序應該先刷新之前提交給OpenGL ES的掛起命令,然后才能移動到后臺,并避免調用OpenGL ES,直到它移回到前臺。

相關參考:Multitasking, High Resolution, and Other iOS Features

6. OpenGL ES Places Additional Restrictions on Multithreaded Apps - OpenGL ES為多線程應用程序添加了其他限制

設計應用程序以利用并發功能可以幫助您提高應用程序的性能。 如果您打算在OpenGL ES應用程序中添加并發性,則必須確保它不會同時從兩個不同的線程訪問相同的上下文。

相關參考:Concurrency and OpenGL ES


學習規劃進程


其他參考

OpenGL ES是由Khronos集團定義的開放標準。 有關OpenGL ES標準的更多信息,請參閱其網頁http://www.khronos.org/opengles/

  • Addison-Wesley發布的OpenGL? ES 3.0 Programming Guide全面介紹了OpenGL ES的概念。
  • OpenGL? Shading Language, Third Edition,也由Addison-Wesley出版,提供了許多可用于OpenGL ES應用程序的著色算法。 您可能需要修改其中一些算法才能在移動圖形處理器上高效運行。
  • OpenGL ES API Registry是OpenGL ES規范的官方存儲庫,OpenGL ES著色語言規范以及OpenGL ES擴展的文檔。
  • OpenGL ES Framework Reference介紹了Apple將OpenGL ES集成到iOS中提供的平臺特定函數和類。
  • iOS Device Compatibility Reference提供了有關您的應用程序可用的硬件和軟件功能的更多詳細信息。
  • GLKit Framework Reference介紹了由Apple提供的一個框架,可以更輕松地開發OpenGL ES 2.0和3.0應用程序。

參考文章

1. OpenGLES渲染管道,頂點著色器(VertexShader) ,片元著色器(FragmentShader)

后記

未完,待續~~~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內容