目录

  • 一. EGL 前言
  • 二. EGL 绘制流程简介
  • 三.eglCreateContext 函数简介
    • 1.关于属性列表 attribList
    • 2.关于返回值
  • 四.eglCreateContext 函数使用
  • 五.猜你喜欢

零基础 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 绘制流程简介

  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 对象
  11. 删除 EGLContext 对象
  12. 终止与 EGLDisplay 之间的连接

三.eglCreateContext 函数简介

EGLContext 上下文包含了操作所需的所有状态信息,OpenGL ES 必须有一个可用的上下文 EGLContext 才能进行绘图。如果没有 EGLContext ,OpenGL 指令就没有执行的环境。函数声明如下:

/*描述:创建 OpenGL ES 上下文 EGLContext*参数:*    display:指定显示的连接*    config:配置 EGLConfig*    share_context:允许其它 EGLContext 共享数据,使用 EGL_NO_CONTEXT 表示不共享*    attribList:指定操作的属性列表,只能接受一个属性 EGL_CONTEXT_CLIENT_VERSION(设置 OpenGL ES 版本)**返回值:成功时返回新创建的 EGLContext,失败时返回 EGL_NO_CONTEXT*/EGLAPI EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay display,EGLConfig config,EGLContext share_context,const EGLint *attribList);

1.关于属性列表 attribList

attribList 属性目前只有 EGL_CONTEXT_CLIENT_VERSION,类型是整数值,用于指定 OpenGL ES 版本,使用方法如下:

/*
EGL_CONTEXT_CLIENT_VERSION, 3, //使用OpenGL ES 3.0 版本 API
EGL_CONTEXT_CLIENT_VERSION, 2, //使用OpenGL ES 2.0版本 API
EGL_CONTEXT_CLIENT_VERSION, 1, //使用OpenGL ES 1.0版本 API
*/
const ELGint attribList[] = {EGL_CONTEXT_CLIENT_VERSION, 3, //使用OpenGL ES 3.0 版本 APIEGL_NONE
};

如果当前设备只支持 OpenGL ES 2.0,那么该值就不能设置为 3 ,否则上下文创建失败;

值得注意的是:如果使用 OpenGL ES 2.0,那么就不能使用 OpenGL ES 3.0 相关 API, VAO / PBO 等都属于 OpenGL ES 3.0,详细介绍请参考《OpenGL ES 2.0 和 3.0 区别》

2.关于返回值

成功时返回新创建的 EGLContext,失败时返回 EGL_NO_CONTEXT,也有可能返回其他错误,可以通过 eglGetError 获取错误号,示例代码:

EGLContext context = eglCreateContext(display, config, EGL_NO_CONTEXT, attribList);if (context == EGL_NO_CONTEXT) {EGLError error = eglGetError();if (error == EGL_BAD_CONFIG) {// Handle error and recover}
}

通过 eglGetError 获取错误类型可能是以下值:

EGL_BAD_MATCH
EGL_BAD_DISPLAY
EGL_NOT_INITIALIZED
EGL_BAD_CONFIG
EGL_BAD_CONTEXT
EGL_BAD_ATTRIBUTE
EGL_BAD_ALLOC

四.eglCreateContext 函数使用

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:OpenGL ES EGL eglCreateContext
//@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();
}const EGLint attribs[] =
{  EGL_CONTEXT_CLIENT_VERSION, 2,  //使用OpenGL ES 2.0 版本 APIEGL_NONE
};
EGLContext context = eglCreateContext(display, configs_list, EGL_NO_CONTEXT, attribs);  if (context == EGL_NO_CONTEXT)
{  if (EGL_BAD_CONFIG == eglGetError())  {  ...  }
}

五.猜你喜欢

  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

OpenGL ES EGL eglCreateContext相关推荐

  1. OpenGL ES EGL eglDestroyContext

    目录 一. EGL 前言 二. EGL 绘制流程简介 三.eglDestroyContext 函数简介 四.eglDestroyContext 使用 四.猜你喜欢 零基础 OpenGL ES 学习路线 ...

  2. OpenGL ES EGL eglCreatePbufferSurface

    目录 一. EGL 前言 二. EGL 绘制流程简介 三.eglCreatePbufferSurface 函数简介 1.eglCreatePbufferSurface 简介 2.eglCreatePb ...

  3. OpenGL ES EGL eglQueryContext

    目录 一. EGL 前言 二. EGL 绘制流程简介 三.eglQueryContext 函数简介 四.eglQueryContext 使用 四.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : ...

  4. OpenGL ES EGL eglDestroySurface

    目录 一. EGL 前言 二. EGL 绘制流程简介 三.eglDestroySurface 函数简介 四.eglDestroySurface 使用 四.猜你喜欢 零基础 OpenGL ES 学习路线 ...

  5. OpenGL ES EGL eglSwapBuffer

    目录 一. EGL 前言 二. EGL 绘制流程简介 三.eglSwapBuffer 函数简介 四.关于多个 EGLContext 五.共享 EGLContext 六.猜你喜欢 零基础 OpenGL ...

  6. OpenGL ES EGL 简介

    目录 一.EGL 简介 二.EGL 跨平台之 ANGLE 1.ANGLE 支持跨平台 2.ANGLE 支持渲染器 3.ANGLE 下载地址 三.EGL 坐标系 四.EGL 绘图步骤 五.猜你喜欢 零基 ...

  7. OpenGL ES EGL TLS(线程局部存储) G3D

    1. 什么是EGL EGL是用来管理绘图表面的(Drawing surfaces),并且提供了如下的机制 (1) 与本地窗口系统进行通信 (2) 查找绘图表面可用的类型和配置信息 (3) 创建绘图表面 ...

  8. OpenGL ES glut glew glfw glad freeglut

    目录 一.简介 1.freeglut 2.glew 3.glut 4.glfw 5.glad 二.分类 1.窗口管理 2.函数加载 三.组合使用 1.freeglut + glew 2.glfw + ...

  9. OpenGL ES glfw 下载和使用

    目录 一.glfw 简介 二.glfw 下载 三.glfw 编译 四.glfw 使用 1.OpenGL glfw + glad 效果演示 2.OpenGL glfw + glad <源码下载&g ...

  10. OpenGL ES freeglut 下载和使用

    目录 一.freeglut 简介 二.freeglut 下载 五.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基 ...

最新文章

  1. python 获取文件大小,创建时间和访问时间
  2. linux查看ssh端口8222,下载服务器SSH被用户恶意猜密码了
  3. error:Flash Download failed-“Cortex-M3”,“Programming Algorithm”【转】
  4. C#泛型-泛型集合DictionaryK,V
  5. 数据库之关系模型的组成,特点以及完整性约束
  6. OpenCV findContours和drawContours用法的实例(附完整代码)
  7. docker安装软件(vim,service)
  8. 如何有效的保护计算机,如何保护计算机-20210717095143.pdf-原创力文档
  9. AT指令:常见的AT命令
  10. C语言宏定义,内置宏的用法
  11. 【面试】求数组子序列的最大和
  12. python面向对象设计角色攻击_Python技能:面向对象基础实战之英雄联盟
  13. python爬虫音乐犯法么_Python爬虫实战之爬取QQ音乐数据!QQ音乐限制太多了
  14. 基于Python的QQ空间相册中的所有照片下载器
  15. 2018 06 01 第一次博客 自然语言处理
  16. 乔治城大学计算机科学硕士2019,乔治城大学2019THE世界大学排名最新排名第109
  17. element table 左对齐
  18. Merriam-Webster's Vocabulary Builder 学习笔记 Unit 6
  19. 分光器尺寸及光损耗计算
  20. tcp ip通讯 linux xpe,xpe安装在PCA-6006VE( #234

热门文章

  1. openMP编程详解(囊括所有基本指令)
  2. idea如何实现修改代码即时生效
  3. 大型医院挂号系统(数据结构课设)
  4. 设置一绝对地址为0x67a9的整型变量的值为0xaa66
  5. 魔方游戏(附游戏开源代码)
  6. 【Microsoft Azure 的1024种玩法】六十九.通过SSMS将本地自建SQL Server 数据库脱机迁移至Azure SQL Database
  7. 《PRML》第一章 读书笔记.1
  8. TypeError: __init__() got an unexpected keyword argument ‘rate‘
  9. Mocking and Stubbing
  10. OpenStack部署(图文详解)