一、简介
EGL 是渲染 API(如 OpenGL ES)和原生窗口系统之间的接口。
通常来说,OpenGL 是一个操作 GPU 的 API,它通过驱动向 GPU 发送相关指令,控制图形渲染管线状态机的运行状态,但是当涉及到与本地窗口系统进行交互时,就需要这么一个中间层,且它最好是与平台无关的。
因此 EGL 被设计出来,作为 OpenGL 和原生窗口系统之间的桥梁。
二、功能
EGL API 是独立于 OpenGL ES 各版本标准的独立的一套 API,其主要作用是为 OpenGL 指令 创建 Context 、绘制目标 Surface 、配置 FrameBuffer 属性、Swap 提交绘制结果 等。
EGL 提供如下机制:
与设备原生窗口通信
查询绘制 surface 的可用类型和配置
创建绘制 surface
在 OpenGL ES 3.0 或其他渲染 API 之间同步渲染
管理纹理贴图等渲染资源
OpenGL ES 的 javax.microedition.khronos.opengles 包定义了平台无关的 GL 绘图指令,EGL(javax.microedition.khronos.egl ) 则定义了控制 displays,contexts 以及 surfaces 的统一的平台接口。
-
Display(EGLDisplay) 是对实际显示设备的抽象。
-
Surface(EGLSurface)是对用来存储图像的内存区域 FrameBuffer 的抽象,包括 Color Buffer, Stencil Buffer ,Depth Buffer。
-
Context (EGLContext) 存储 OpenGL ES绘图的一些状态信息。
使用EGL的绘图的一般步骤:
-
获取 EGLDisplay 对象
-
初始化与 EGLDisplay 之间的连接
-
获取 EGLConfig 对象
-
创建 EGLContext 实例
-
创建 EGLSurface 实例
-
连接 EGLContext 和 EGLSurface
-
使用 GL 指令绘制图形
-
断开并释放与 EGLSurface 关联的 EGLContext 对象
-
删除 EGLSurface 对象
-
删除 EGLContext 对象
-
终止与 EGLDisplay 之间的连接