OpenGLES 映射缓冲区对象(OpenGL ES EAGLContext 和 EGLContext)
零基础 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(全写 OpenGraphicsLibrary)是个定义了一个跨编程语言、跨平台的应用程序接口(API)的规格,它用于生成二维、三维图像。OpenGL 广泛用于 PC 平台(windows、Linux、Unix、Mac OS X);
2.OpenGL ES
早先定义 OpenGLES 是 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 上下文:
/******************************************************************************************/ //@Author:猿说编程 //@Blog(个人博客地址): www.codersrc.com //@File:OpenGL ES OpenGL ES EAGLContext 和 EGLContext //@Time:2022/08/04 07:30 //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! /******************************************************************************************/ //创建上下文 EGLint contextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 3, EGL_NONE }; EGLContext context = eglCreateContext ( display , config , EGL_NO_CONTEXT, contextAttribs ); //绑定上下文 eglMakeCurrent ( display , surface , surface , context )2.EAGLContext
IOS 平台为 OpenGL 提供的实现是 EAGL,OpenGL ES 系统与本地窗口(UIKit)桥接由 EAGL 上下文系统实现。
IOS EAGLContext 创建 OpenGL ES 上下文:
/******************************************************************************************/ //@Author:猿说编程 //@Blog(个人博客地址): www.codersrc.com //@File:OpenGL ES OpenGL ES EAGLContext 和 EGLContext //@Time:2022/08/04 07:30 //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! /******************************************************************************************/ EAGLContext *_context; _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本文由博客 - 猿说编程 猿说编程 发布!
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!