零基础 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 之间的连接
三.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 来获取系统支持的配置,系统支持的配置通常是利用系统硬件提供最好的性能,同时也可以解决跨平台配置问题
五.猜你喜欢
- 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
ChatGPT 3.5 国内中文镜像站免费使用啦
- 最新
- 最热
只看作者