Android笔记:OpenGL ES与EGL的关系与实例

Posted MichaelX_Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android笔记:OpenGL ES与EGL的关系与实例相关的知识,希望对你有一定的参考价值。

简介

OpenGL 是跨平台的、专业的图形编程接口,而接口的实现是由厂商来完成的。

OpenGL使用这些接口绘制完成后,需要把数据渲染到屏幕上,就需要EGL来接手这部分工作。

EGL:全称Embedded Graphic Library。是 OpenGL ES 和底层 Native 平台 视窗系统之间的接口,如下图所示。

EGL介绍

EGL接口中含有3个对象,如下图所示:

其中:

  • Display(EGLDisplay) 是对实际显示设备的抽象,也就是屏幕

  • Surface(EGLSurface)是对用来存储图像的内存区域

  • FrameBuffer 的抽象,包括 Color Buffer, Stencil Buffer ,Depth Buffer

  • Context (EGLContext) 存储 OpenGL ES绘图的一些状态信息

OpenGL和EGL配合工作的大概流程:

1 EGL 获取到手机屏幕的handle,获取到手机支持的配置(RGBA8888/RGB565 之类,表示每个像素中包 含的颜色等信息的存储空间是多少位)。即EGLConfig。
2.然后根据这个配置创建一块包含默认 buffer 的 surface(buffer 的大小是根据屏幕分辨率乘以每个像素信息所占大小计 算而得)。即EGLSurface
3.用于存放 OpenGL ES 状态集的 context,并将它们 enable 起来。即eglMakeCurrent操作
4.然后, 通过 OpenGL ES 操作 GPU 进行计算,将计算的结果保存在 surface 的 buffer 中。
5.最后,使用 EGL将绘制的图片显示到手机屏幕上。即eglSwapBuffer操作。

实例代码

android平台上,在利用OpenGL去播放渲染视频时,通常会配合GLSurfaceView一起用,这是因为GLSurfaceView封装屏蔽了以上EGL的工作细节,这里使用OpenGL + EGL + SurfaceView + MediaCodec播放一个视频。流程图如下:


代码github传送门:EGLPlayerSimpleDemo

参考文章

glumes《OpenGL之EGL实践
夜行过客《OpenGL ES: (2) OpenGL ES 与 EGL、GLSL的关系

以上是关于Android笔记:OpenGL ES与EGL的关系与实例的主要内容,如果未能解决你的问题,请参考以下文章

android graphic(14)—EGL和OpenGL ES之间的关系

android graphic(14)—EGL和OpenGL ES之间的关系

Android OpenGL ES 学习 – GLSurfaceView 源码解析GL线程以及自定义 EGL

Android OpenGL ES 学习 – GLSurfaceView 源码解析GL线程以及自定义 EGL

OPENGL ES 2.0 知识串讲――EGL详解

android studio | openGL es 3.0增强现实(AR)开发 GLSurfaceView浅解