美文网首页
OpenGL ES EAGLContext 和 EGLConte

OpenGL ES EAGLContext 和 EGLConte

作者: 猿说编程 | 来源:发表于2022-09-01 23:26 被阅读0次

    零基础 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 上下文:

    /******************************************************************************************/
    //@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 绘制流程简介

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

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

    1. Windows OpenGL ES 调节亮度 Demo
    2. Windows OpenGL ES 调节曝光 Demo
    3. Windows OpenGL ES 调节对比度 Demo
    4. Windows OpenGL ES 调节饱和度 Demo
    5. Windows OpenGL ES 调节伽马线 Demo

    四. EAGL 绘制

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

    1. GPUImageBrightnessFilter //亮度
    2. GPUImageExposureFilter //曝光
    3. GPUImageContrastFilter //对比度
    4. GPUImageSaturationFilter //饱和度
    5. GPUImageGammaFilter //伽马线
    6. GPUImageColorInvertFilter //反色
    7. GPUImageSepiaFilter //褐色(怀旧)
    8. GPUImageLevelsFilter //色阶
    9. GPUImageGrayscaleFilter //灰度

    五.猜你喜欢

    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
    15. OpenGL ES EGL eglCreateWindowSurface
    16. OpenGL ES EGL eglCreatePbufferSurface
    17. OpenGL ES EGL eglMakeCurrent
    18. OpenGL ES EGL eglSwapBuffer
    19. OpenGL ES EGL eglDestroySurface
    20. OpenGL ES EGL eglDestroyContext
    21. OpenGL ES EGL eglQueryContext
    22. OpenGL ES EAGLContext 和 EGLContext

    本文由博客 - 猿说编程 猿说编程 发布!

    相关文章

      网友评论

          本文标题:OpenGL ES EAGLContext 和 EGLConte

          本文链接:https://www.haomeiwen.com/subject/zfaynrtx.html