版本記錄
版本號 | 時間 |
---|---|
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
學習規劃進程
開始的時候讀這三篇文章:Checklist for Building OpenGL ES Apps for iOS, Configuring OpenGL ES Contexts, Drawing with OpenGL ES and GLKit。這些章節概述了OpenGL ES如何整合到iOS中,以及在iOS設備上啟動和運行第一個OpenGL ES應用程序所需的所有細節。
如果你熟悉了iOS中OpenGL ES的基本用法,對于重要的平臺指南需要讀Drawing to Other Rendering Destinations 和 Multitasking, High Resolution, and Other iOS Features,熟悉在5.0之前的iOS版本中使用OpenGL ES的開發人員應該研究使用OpenGL ES和GLKit繪圖,了解有關簡化OpenGL ES開發的新功能的詳細信息
最后需要讀OpenGL ES Design Guidelines, Tuning Your OpenGL ES App,以下章節深入了解如何設計高效的OpenGL ES應用程序。除非另有說明,本書中的OpenGL ES代碼示例以
OpenGL ES 3.0
為目標。 您可能需要進行更改以使用其他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)
后記
未完,待續~~~