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