OpenGL ES EAGLContext 和 EGLContext

[复制链接]
发表于 2022-10-25 21:23:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
零基础 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  是个与硬件无关的软件接口,可以在不同的平台如 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  和原生窗口系统之间的桥梁,且它与平台无关的。

EGLContext 创建 OpenGL ES 上下文:
  1. /******************************************************************************************/
  2. //@Author:猿说编程
  3. //@Blog(个人博客地址): www.codersrc.com
  4. //@File:OpenGL ES OpenGL ES EAGLContext 和 EGLContext
  5. //@Time:2022/08/04 07:30
  6. //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  7. /******************************************************************************************/
  8. //创建上下文
  9. EGLint contextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 3, EGL_NONE };
  10. EGLContext  context = eglCreateContext ( display , config , EGL_NO_CONTEXT, contextAttribs );
  11. //绑定上下文
  12. eglMakeCurrent ( display , surface , surface , context )
复制代码
2.EAGLContext

IOS 平台为 OpenGL 提供的实现是 EAGL,OpenGL ES 系统与本地窗口(UIKit)桥接由 EAGL 上下文系统实现。
IOS EAGLContext 创建 OpenGL ES 上下文:
  1. /******************************************************************************************/
  2. //@Author:猿说编程
  3. //@Blog(个人博客地址): www.codersrc.com
  4. //@File:OpenGL ES OpenGL ES EAGLContext 和 EGLContext
  5. //@Time:2022/08/04 07:30
  6. //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  7. /******************************************************************************************/
  8. EAGLContext *_context;
  9. _context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
复制代码
三. EGL 绘制流程简介


  • 获取 EGL Display 对象:eglGetDisplay
  • 初始化与 EGLDisplay 之间的连接:eglInitialize
  • 获取 EGLConfig 对象:eglChooseConfig / eglGetConfigs
  • 创建 EGLContext 实例:eglCreateContext
  • 创建 EGLSurface 实例:eglCreateWindowSurface / eglCreatePbufferSurface
  • 连接 EGLContext 和 EGLSurface 上下文 eglMakeCurrent
  • 使用 OpenGL ES API 绘制图形:gl_*
  • 切换 front buffer 和 back buffer 显示:eglSwapBuffer
  • 断开并释放与 EGLSurface 关联的 EGLContext 对象:eglRelease
  • 删除 EGLSurface 对象 eglDestroySurface
  • 删除 EGLContext 对象 eglDestroyContext
  • 终止与 EGLDisplay 之间的连接

EGL OpenGL ES 绘制可以参考以下代码:

  • Windows OpenGL ES 调节亮度 Demo
  • Windows OpenGL ES 调节曝光 Demo
  • Windows OpenGL ES 调节对比度 Demo
  • Windows OpenGL ES 调节饱和度 Demo
  • Windows OpenGL ES 调节伽马线 Demo
四. EAGL 绘制

IOS EAGL OpenGL ES 绘制可以参考以下代码:

  • GPUImageBrightnessFilter //亮度
  • GPUImageExposureFilter //曝光
  • GPUImageContrastFilter //对比度
  • GPUImageSaturationFilter //饱和度
  • GPUImageGammaFilter //伽马线
  • GPUImageColorInvertFilter //反色
  • GPUImageSepiaFilter //褐色(怀旧)
  • GPUImageLevelsFilter //色阶
  • GPUImageGrayscaleFilter //灰度
五.猜你喜欢


  • 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
  • OpenGL ES EGL eglCreateContext
  • OpenGL ES EGL eglCreateWindowSurface
  • OpenGL ES EGL eglCreatePbufferSurface
  • OpenGL ES EGL eglMakeCurrent
  • OpenGL ES EGL eglSwapBuffer
  • OpenGL ES EGL eglDestroySurface
  • OpenGL ES EGL eglDestroyContext
  • OpenGL ES EGL eglQueryContext
  • OpenGL ES EAGLContext 和 EGLContext
本文由博客 - 猿说编程 猿说编程 发布!
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表