OpenGL ES EGL eglChooseConfig

零基础 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 的配置属性

EGLContextOpenGL ES 图形上下文


二. EGL 绘制流程简介

  1. 获取 EGL Display 对象:eglGetDisplay
  2. 初始化与 EGLDisplay 之间的连接:eglInitialize
  3. 获取 EGLConfig 对象:eglChooseConfig / eglGetConfigs
  4. 创建 EGLContext 实例:eglCreateContext
  5. 创建 EGLSurface 实例:eglCreateWindowSurface
  6. 连接 EGLContext 和 EGLSurface:eglMakeCurrent
  7. 使用 OpenGL ES API 绘制图形:gl_*
  8. 切换 front buffer 和 back buffer 显示:eglSwapBuffer
  9. 断开并释放与 EGLSurface 关联的 EGLContext 对象:eglRelease
  10. 删除 EGLSurface 对象
  11. 删除 EGLContext 对象
  12. 终止与 EGLDisplay 之间的连接

三.eglGetConfigs 函数简介  

EGLConfigs 是一个用来描述 EGLSurface 配置信息的数据类型。一般来说,选择配置的方法有两种: 

方法一:系统支持的配置 eglGetConfigs(跨平台时会自动获取系统支持的配置) 

方法二:自定义配置 eglChooseChofig(跨平台时,不同平台需要设置不同的配置)

函数声明如下:

/* 描述:配置列表,用于后面创建 EGLSurface
 * 参数:
 *     dpy:系统显示类型,EGLDisplay 对象
 *     attr_list:你想要的属性事先定义到这个数组里
 *     config:图形系统将返回若干满足条件的配置到该数组
 *     config_size:想要选中符合的config的最大个数
 *     num_config:图形系统返回的可用的配置个数
 
 * 返回值:成功返回 TRUE,失败返回 FALSE
*/ 
EGLboolean eglChooseConfig(EGLDisplay dpy,
                     const EGLint * attr_list,
                     EGLConfig * config,
                     EGLint config_size,
                     EGLint *num_config)

四.eglGetConfigs 函数使用

glChooseConfig 函数将适配一个你所期望的配置,并且尽可能接近一个有效的系统配置。

attribList 指定了选择配置时需要参照的属性。

configs 将返回一个按照 attribList 排序的平台有效的所有 EGL framebuffer 配置列表。

config_size 指定了可以返回到 configs 的总配置个数。

num_config 返回了实际匹配的配置总数。

示例代码:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:OpenGL ES EGL eglChooseConfig
//@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();
}

使用 glChooseConfig 函数将适配一个你所期望的配置,并且尽可能接近一个有效的系统配置。

而在跨平台时,EGLConfigs 配置会有差别,我们可以直接通过 eglGetConfigs 来获取系统支持的配置,系统支持的配置通常是利用系统硬件提供最好的性能,同时也可以解决跨平台配置问题


五.猜你喜欢

  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

未经允许不得转载:猿说编程 » OpenGL ES EGL eglChooseConfig
喜欢(2) 打赏

评论抢沙发

评论前必须登录!

文章付费之后,如果下载源码失败,请直接留言,博主看到消息会及时处理的,感谢配合!!!共勉!!

开始学习

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏