OpenGL ES 框架詳細解析(三) —— 構建用於iOS的OpenGL ES應用程式的清單
版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2017.09.28 |
前言
OpenGL ES是一個強大的圖形庫,是跨平臺的圖形API,屬於OpenGL的一個簡化版本。iOS系統可以利用OpenGL ES將影象資料直接送入到GPU進行渲染,這樣避免了從CPU進行計算再送到顯示卡渲染帶來的效能的高消耗,能帶來來更好的視訊效果和使用者體驗。接下來幾篇就介紹下iOS 系統的 OpenGL ES框架。感興趣的可以看上面幾篇。
1. OpenGL ES 框架詳細解析(一) —— 基本概覽
2. OpenGL ES 框架詳細解析(二) —— 關於OpenGL ES
構建用於iOS的OpenGL ES應用程式的清單
OpenGL ES規範定義了一個平臺中立的API,用於使用GPU硬體渲染圖形。 實現OpenGL ES的平臺提供執行OpenGL ES命令的渲染上下文,用於儲存渲染結果的幀緩衝區以及呈現幀緩衝區內容進行顯示的一個或多個渲染目標。 在iOS中,EAGLContext類實現了一個渲染上下文。 iOS僅提供一種型別的幀緩衝區,OpenGL ES幀緩衝區物件,GLKView
和CAEAGLLayer
類實現渲染目標。
在iOS中構建OpenGL ES應用程式需要幾個注意事項,其中一些是OpenGL ES程式設計的通用,其中一些特定於iOS。 按照此清單和下面的詳細部分開始:
- 確定哪個版本的OpenGL ES具有適用於您的應用程式的功能集,並建立一個OpenGL ES上下文。
- 在執行時驗證裝置是否支援您要使用的OpenGL ES功能。
- 選擇在哪裡渲染您的OpenGL ES內容。
- 確保您的應用在iOS中正常執行。
- 實現您的渲染引擎。
- 使用Xcode和Instruments來除錯您的OpenGL ES應用程式,並調整它以獲得最佳效能。
Choosing Which OpenGL ES Versions to Support - 選擇OpenGL ES版本支援
決定您的應用程式是否應支援OpenGL ES 3.0,OpenGL ES 2.0,OpenGL ES 1.1
或多個版本。
-
OpenGL ES 3.0
是iOS 7中的新功能。它增加了許多新功能,可以實現更高效能,通用GPU計算技術,以及以前只能在桌面級硬體和遊戲機上使用更復雜的視覺效果。 -
OpenGL ES 2.0
是iOS裝置的基準配置檔案,具有基於可程式設計著色器的可配置圖形流水線。 -
OpenGL ES 1.1
僅提供基本的固定功能圖形管道,主要用於向後相容性。
您應該選擇好支援與您的應用程式最相關的功能和裝置的OpenGL ES版本。 要了解有關iOS裝置的OpenGL ES功能的更多資訊,請閱讀iOS Device Compatibility Reference。
要為您打算支援的OpenGL ES版本建立上下文,請閱讀Configuring OpenGL ES Contexts。 要了解OpenGL ES版本的選擇與您可能在應用程式中使用的渲染演算法相關,請參閱OpenGL ES Versions and Renderer Architecture。
Verifying OpenGL ES Capabilities - 驗證OpenGL ES功能
iOS Device Compatibility Reference總結了iOS裝置上可用的功能和擴充套件功能。 但是,為了讓應用程式儘可能多地執行裝置和iOS版本,您的應用程式應始終在執行時查詢OpenGL ES實現的功能。
要確定實現特定的限制,如最大紋理大小或頂點屬性的最大數量,請使用適當的glGet
函式為其資料查詢相應令牌的值(例如,在gl.h
頭中找到的MAX_TEXTURE_SIZE
或MAX_VERTEX_ATTRIBS
) 型別。
要檢查OpenGL ES 3.0
擴充套件,請使用glGetIntegerv
和glGetStringi
函式,如以下程式碼示例所示:
BOOL CheckForExtension(NSString *searchName)
{
// Create a set containing all extension names.
// (For better performance, create the set only once and cache it for future use.)
int max = 0;
glGetIntegerv(GL_NUM_EXTENSIONS, &max);
NSMutableSet *extensions = [NSMutableSet set];
for (int i = 0; i < max; i++) {
[extensions addObject: @( (char *)glGetStringi(GL_EXTENSIONS, i) )];
}
return [extensions containsObject: searchName];
}
要檢查OpenGL ES 1.1
和2.0
副檔名,請呼叫glGetString(GL_EXTENSIONS)
獲取所有副檔名的空格分隔列表。
Choosing a Rendering Destination - 選擇渲染目的地
在iOS中,一個framebuffer
物件儲存繪圖命令的結果。 (iOS不實現視窗系統提供的幀緩衝區。)可以通過多種方式使用framebuffer物件的內容:
GLKit框架提供了一個檢視,它繪製了OpenGL ES內容並管理自己的framebuffer物件,以及支援動畫化OpenGL ES內容的檢視控制器。 使用這些類建立全屏檢視或將OpenGL ES內容適合於UIKit檢視層次結構。 要了解這些類,請參閱Drawing with OpenGL ES and GLKit。
CAEAGLLayer
類提供了一種繪製OpenGL ES內容作為Core Animation圖層組合的一部分的方法。 使用此類時,必須建立自己的framebuffer物件。與任何OpenGL ES實現一樣,您還可以使用幀緩衝區進行螢幕外圖形處理或渲染到圖形管道中其他位置的紋理。 使用OpenGL ES 3.0,可以在使用多個渲染目標的渲染演算法中使用螢幕外緩衝區。
要了解如何渲染到螢幕外緩衝區,紋理或核心動畫層,請參閱Drawing to Other Rendering Destinations。
Integrating with iOS - 與iOS整合
預設情況下,iOS應用程式支援多工,但是在OpenGL ES應用程式中正確處理此功能需要額外考慮。 OpenGL ES的不當使用可能導致您的應用程式在後臺被系統殺死。
許多iOS裝置包括高解析度顯示器,因此您的應用程式應支援多種顯示尺寸和解析度。
要了解支援這些和其他iOS功能,請閱讀Multitasking, High Resolution, and Other iOS Features。
Implementing a Rendering Engine - 實現渲染引擎
設計OpenGL ES繪圖程式碼有許多可能的策略,其全部細節超出了本文件的範圍。 渲染引擎設計的許多方面對OpenGL和OpenGL ES的所有實現都是通用的。
要了解iOS裝置重要的設計注意事項,請參閱OpenGL ES Design Guidelines 和 Concurrency and OpenGL ES。
Debugging and Profiling - 除錯和分析
Xcode和Instruments為您的應用程式提供了許多跟蹤渲染問題和分析OpenGL ES效能的工具。
要了解有關解決問題並提高OpenGL ES應用程式效能的更多資訊,請參閱Tuning Your OpenGL ES App。
後記
未完,待續~~~
相關文章
- OpenGL ES on iOS — AssimpiOS
- OpenGL ES on iOS --- AssimpiOS
- OpenGL/OpenGL ES 初探
- OpenGL ES on iOS — 光照進階iOS
- OpenGL ES on iOS --- 光照進階iOS
- OpenGL/OpenGL ES入門: 紋理應用 - 紋理座標及案例解析(金字塔)
- OpenGL/OpenGL ES入門:紋理初探 - 常用API解析API
- Android OpenGL ES 開發(二): OpenGL ES 環境搭建Android
- OpenGL ES 入門
- OpenGL ES 2 o 初探
- 使用 iOS OpenGL ES 實現長腿功能iOS
- OpenGL ES 2 0 (iOS) 筆記大綱iOS筆記
- 詳解 OpenGL ES 2.x 渲染流程
- OpenGL ES SDK for Android - 2Android
- OpenGL ES SDK for Android - 6Android
- Opengl ES之踩坑記
- android opengl es 原始碼Android原始碼
- Opengl ES 3.0 on iOS--- HelloWord(繪製彩色矩形)iOS
- OpenGL ES 2 0 (iOS)[06 1]:基礎紋理iOS
- OpenGL ES專案總結一
- OpenGL ES 學習資源分享
- Opengl ES之YUV資料渲染
- iOS OpenGL ES FBO 幀快取區 渲染快取區詳解iOS快取
- OpenGL/OpenGL ES入門: 影象渲染實現以及渲染問題
- OpenGL/OpenGL ES入門: 渲染流程以及固定儲存著色器
- Elastic App Search 快速構建 ES 應用ASTAPP
- OpenGL ES on iOS --- 座標系統與矩陣轉換iOS矩陣
- OpenGL/OpenGL ES 入門:基礎變換 - 初識向量/矩陣矩陣
- 一文詳解 OpenGL ES 紋理顏色混合
- OpenGL ES3 0實現簡單粒子火焰效果S3
- SiriKit框架詳細解析(九) —— 構建Siri Shortcuts簡單示例(三)框架
- ES6解析賦值的應用賦值
- 一文詳解 OpenGL ES 3.x 渲染管線
- 使用 OpenGL ES 實現全景播放器播放器
- [FFmpeg + OpenGL + OpenSL ES]音視訊同步- 8
- OPENGL-ES之頂點索引繪圖索引繪圖
- OpenGL ES繪製3D圖形3D
- 學習OpenGL ES之繪製三角形