OpenGL ES EAGLContext 和 EGLContext

来源:https://www.cnblogs.com/shuopython/archive/2022/09/07/16667696.html
-Advertisement-
Play Games

零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 特效 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> O ...


零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄  >> OpenGL ES 基礎

零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄   >> OpenGL ES 特效

零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄   >> OpenGL ES 轉場

零基礎 OpenGL ES 學習路線推薦 :  OpenGL ES 學習目錄 >> OpenGL ES 函數

零基礎 OpenGL ES 學習路線推薦 :  OpenGL ES 學習目錄 >> OpenGL ES GPUImage 使用

零基礎 OpenGL ES 學習路線推薦 :  OpenGL ES 學習目錄 >> OpenGL ES GLSL 編程

一.前言

在講解 EAGLContext 和 EGLContext 之前,我們需要先說明一下 OpenGL 和 OpenGL ES 的關係

1.OpenGL

OpenGL(全寫 Open Graphics Library)是個定義了一個跨編程語言、跨平臺的應用程式介面(API)的規格,它用於生成二維、三維圖像。OpenGL 廣泛用於 PC 平臺(windows、Linux、Unix、Mac OS X);

2.OpenGL ES

早先定義 OpenGL ES 是 OpenGL 的嵌入式設備版本,用於移動端平臺(Android、iOS),但由於嵌入式設備要求的是高性能,所以一些其它純追求高性能的設備也開始用這種 API 方式;

OpenGL ES  是 OpenGL 的子集,區別在於 OpenGL ES 刪減了 OpenGL 一切低效能的操作方式,有高性能的決不留低效能的,即只求效能不求相容性。(即:OpenGL ES 能實現的,OpenGL 也能實現;OpenGL 部分 API,OpenGL ES 不支持)

OpenGL ES EAGLContext 和 EGLContext

OpenGL ES  是個與硬體無關的軟體介面,可以在不同的平臺如 Windows、Unix、Linux、MacOS、IOS、Android 之間進行移植。因此,支持 OpenGL ES 的軟體具有很好的移植性,可以獲得非常廣泛的應用。

3.平臺差異

OpenGL 和 OpenGL ES 在不同平臺上有不同的機制以關聯視窗系統

1. OpenGL 在 Windows 上是 WGL ,在 Linux 上是 GLX ,在 Apple OS 上是 AGL ;

2. OpenGL ES 在 Windows / Android 上是 EGL,在 IOS 中是 EAGL;

二. EAGLContext 和 EGLContext 簡介

1.EGLContext

Windows / Android 上是 EGL ,EGL 是渲染 API(如 OpenGL ES)和原生視窗系統之間的介面。通常來說,OpenGL  是一個操作 GPU 的 API,它通過驅動向 GPU 發送相關指令,控製圖形渲染管線狀態機的運行狀態,但是當涉及到與本地視窗系統進行交互時,就需要這麼一個中間層,因此 EGL 被設計出來,作為  OpenGL  和原生視窗系統之間的橋梁,且它與平臺無關的。

OpenGL ES EAGLContext 和 EGLContext

EGLContext 創建 OpenGL ES 上下文:

/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:OpenGL ES OpenGL ES EAGLContext 和 EGLContext
//@Time:2022/08/04 07:30
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/


//創建上下文
EGLint contextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 3, EGL_NONE };
EGLContext  context = eglCreateContext ( display , config , EGL_NO_CONTEXT, contextAttribs );

//綁定上下文
eglMakeCurrent ( display , surface , surface , context )

2.EAGLContext

IOS 平臺為 OpenGL 提供的實現是 EAGL,OpenGL ES 系統與本地視窗(UIKit)橋接由 EAGL 上下文系統實現。

IOS EAGLContext 創建 OpenGL ES 上下文:

/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:OpenGL ES OpenGL ES EAGLContext 和 EGLContext
//@Time:2022/08/04 07:30
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/


EAGLContext *_context;
 _context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

三. EGL 繪製流程簡介

  1. 獲取 EGL Display 對象:eglGetDisplay
  2. 初始化與 EGLDisplay 之間的連接:eglInitialize
  3. 獲取 EGLConfig 對象:eglChooseConfig / eglGetConfigs
  4. 創建 EGLContext 實例:eglCreateContext
  5. 創建 EGLSurface 實例:eglCreateWindowSurface / eglCreatePbufferSurface
  6. 連接 EGLContext 和 EGLSurface 上下文 eglMakeCurrent
  7. 使用 OpenGL ES API 繪製圖形:gl_*
  8. 切換 front buffer 和 back buffer 顯示:eglSwapBuffer
  9. 斷開並釋放與 EGLSurface 關聯的 EGLContext 對象:eglRelease
  10. 刪除 EGLSurface 對象 eglDestroySurface
  11. 刪除 EGLContext 對象 eglDestroyContext
  12. 終止與 EGLDisplay 之間的連接

OpenGL ES EAGLContext 和 EGLContext

EGL OpenGL ES 繪製可以參考以下代碼:

  1. Windows OpenGL ES 調節亮度 Demo
  2. Windows OpenGL ES 調節曝光 Demo
  3. Windows OpenGL ES 調節對比度 Demo
  4. Windows OpenGL ES 調節飽和度 Demo
  5. Windows OpenGL ES 調節伽馬線 Demo

四. EAGL 繪製

IOS EAGL OpenGL ES 繪製可以參考以下代碼

  1. GPUImageBrightnessFilter //亮度
  2. GPUImageExposureFilter //曝光
  3. GPUImageContrastFilter //對比度
  4. GPUImageSaturationFilter //飽和度
  5. GPUImageGammaFilter //伽馬線
  6. GPUImageColorInvertFilter //反色
  7. GPUImageSepiaFilter //褐色(懷舊)
  8. GPUImageLevelsFilter //色階
  9. GPUImageGrayscaleFilter //灰度

五.猜你喜歡

  1. OpenGL ES 簡介
  2. OpenGL ES 版本介紹
  3. OpenGL ES 2.0 和 3.0 區別
  4. OpenGL ES 名詞解釋(一)
  5. OpenGL ES 名詞解釋(二)
  6. OpenGL ES GLSL 著色器使用過程
  7. OpenGL ES EGL 簡介
  8. OpenGL ES EGL 名詞解釋
  9. OpenGL ES EGL eglGetDisplay
  10. OpenGL ES EGL eglInitialize
  11. OpenGL ES EGL eglGetConfigs
  12. OpenGL ES EGL eglChooseConfig
  13. OpenGL ES EGL eglGetError
  14. OpenGL ES EGL eglCreateContext
  15. OpenGL ES EGL eglCreateWindowSurface
  16. OpenGL ES EGL eglCreatePbufferSurface
  17. OpenGL ES EGL eglMakeCurrent
  18. OpenGL ES EGL eglSwapBuffer
  19. OpenGL ES EGL eglDestroySurface
  20. OpenGL ES EGL eglDestroyContext
  21. OpenGL ES EGL eglQueryContext
  22. OpenGL ES EAGLContext 和 EGLContext

本文由博客 - 猿說編程 猿說編程 發佈!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在vue項目開發中,有時候會用到sessionStorge和localStorge兩個存儲,這兩個方法怎麼使用就不多敘述了,下麵之說在IOS中遇到的坑: 在登錄系統後需要用到sessionStorge存儲從後端返回的路由,以便下次重覆使用。但是在IOS中sessionStorge的容量是有限度的,遠 ...
  • 本項目主要基於`Elux+Antd`構建,包含React版本和Vue版本,旨在提供給大家一個簡單基礎、開箱即用的後臺管理系統通用模版,主要包含運行環境、腳手架、代碼風格、基本Layout、狀態管理、路由管理、增刪改查邏輯、列表、表單等。 ...
  • 前言 本文將對 Vue-Vben-Admin 角色許可權的狀態管理進行源碼解讀,耐心讀完,相信您一定會有所收穫! 更多系列文章詳見專欄 👉 📚 Vben Admin 項目分析&實踐 。 本文涉及到角色許可權之外的較多內容(路由相關)會一筆帶過,具體功能實現將在後面專題中詳細討論。為了更好的理解本文內 ...
  • JS實現數組扁平化處理 點擊打開視頻講解更加詳細 期望結果: 將數組扁平化並去重 最終得到一個升序且不重覆的數組 步驟: 1、數組扁平化 2、去重 3、排序 <template> <div id="home"> JS實現數組扁平化處理,妙不可言啊! <!-- 期望結果: 將數組扁平化並去重 最終得到 ...
  • 最近接到一個很有意思的需求,能否做到當內容橫向溢出時,依然能夠使用滑鼠滾輪對內容進行滾動的方法。 什麼意思呢?來看看這麼一種情況: 我們有一個垂直方向溢出滾動的容器,以及一個水平方向溢出滾動的容器: 如果使用的是非觸控板(大部分用戶沒有觸控板),而是使用滑鼠來進行操作,會發現,這兩個容器中,只有垂直 ...
  • 我因為最近在學習游戲開發相關知識,然後意識到自己設計模式知識缺乏,所以就去尋找相關書籍,這時候《游戲設計模式》這本書就跳到了我的眼前。 github上有大佬將這本書翻譯了,中文版閱讀地址在這:架構,性能和游戲 · Introduction · 游戲設計模式 (tkchu.me) 序章:架構,性能和游 ...
  • 原型模式(Prototype Pattern)是用於創建重覆的對象,同時又能保證性能。這種類型的設計模式屬於創建型模式,它提供了一種創建對象的最佳方式。 ...
  • Python自學第六天:實戰練習——機選雙色球 我是一個編程小白,目前從事運維工作。 對於運維相關的技術,基本上都是瞭解點皮毛。 因為最近接觸自動化運維工具,看到很多工具都需要用到Python來寫腳本。 於是,利用業餘時間,開始自學Python。 目的並不是要學到很精通,而是希望大致看明白別人寫的代 ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...