目錄 一. EGL 前言 二. EGL 繪製流程簡介 三.eglGetError 函數簡介 四.eglGetError 函數使用 五.猜你喜歡 零基礎 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 編程
一. EGL 前言
EGLNativeDisplayType – 系統顯示類型,標識你所開發設備的物理屏幕,DX/OPenGL ES/Metal/Vulkan….
EGLNativeWindowType – 系統視窗,渲染顯示的視窗句柄
EGLDisplay – 關聯 EGLNativeDisplayType 系統物理屏幕的通用數據類型,是平臺上 WGL / GLX / AGL 的等價物
EGLSurface – 渲染區域,系統視窗或 frame buffer 句柄 ,可以理解為一個後端的渲染目標視窗
EGLConfig – 對 EGLSurface 的 EGL 配置,可以理解為繪製目標 framebuffer 的配置屬性
EGLContext – OpenGL ES 圖形上下文
二. EGL 繪製流程簡介
- 獲取 EGL Display 對象:eglGetDisplay
- 初始化與 EGLDisplay 之間的連接:eglInitialize
- 獲取 EGLConfig 對象:eglChooseConfig / eglGetConfigs
- 創建 EGLContext 實例:eglCreateContext
- 創建 EGLSurface 實例:eglCreateWindowSurface
- 連接 EGLContext 和 EGLSurface:eglMakeCurrent
- 使用 OpenGL ES API 繪製圖形:gl_*
- 切換 front buffer 和 back buffer 顯示:eglSwapBuffer
- 斷開並釋放與 EGLSurface 關聯的 EGLContext 對象:eglRelease
- 刪除 EGLSurface 對象
- 刪除 EGLContext 對象
- 終止與 EGLDisplay 之間的連接
三.eglGetError 函數簡介
EGL 中大部分函數成功時都是返回 EGL_TRUE,失敗返回 EGL_FALSE。至於其他錯誤原因,需要調用 eglGetError 函數獲取:
// 描述:返回 EGL 錯誤號,如果返回 EGL_SUCCESS 說明沒有錯誤
EGLint eglGetError();
四.eglGetError 函數使用
調用 eglGetError 如果返回 EGL_SUCCESS 說明沒有錯誤,返回其他值表示有錯誤產生;例如 :eglInitialize 會初始化 EGL 內部數據,分配顯存等初始化失敗
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:OpenGL ES EGL eglGetError
//@Time:2022/08/04 07:30
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
EGLint attrs[3] = { EGL_DEPTH_SIZE, 16, EGL_NONE };
EGLint num_configs;
EGLConfigs *configs_list;
// Get the display device
if ((eglDisplay = eglGetDisplay(EGL_NO_DISPLAY)) == EGL_NO_DISPLAY) {
return eglGetError();
}
// Initialize the display
if (eglInitialize(eglDisplay, NULL, NULL) == EGL_FALSE) {
return eglGetError();
}
// Obtain the total number of configurations that match
if (eglChooseConfig(eglDisplay, attrs, NULL, 0, &num_configs) == EGL_FALSE) {
return eglGetError();
}
configs_list = malloc(num_configs * sizeof(EGLConfig));
if (configs_list == (EGLConfig *)0){
return eglGetError();
}
// Obtain the first configuration with a depth buffer of 16 bits
if (!eglChooseConfig(eglDisplay, attrs, &configs_list, num_configs, &num_configs)) {
return eglGetError();
}
五.猜你喜歡
- OpenGL ES 簡介
- OpenGL ES 版本介紹
- OpenGL ES 2.0 和 3.0 區別
- OpenGL ES 名詞解釋(一)
- OpenGL ES 名詞解釋(二)
- OpenGL ES GLSL 著色器使用過程
- OpenGL ES EGL 簡介
- OpenGL ES EGL 名詞解釋
- OpenGL ES EGL eglGetDisplay
- OpenGL ES EGL eglInitialize
- OpenGL ES EGL eglGetConfigs
- OpenGL ES EGL eglChooseConfig
- OpenGL ES EGL eglGetError
本文由博客 - 猿說編程 猿說編程 發佈!