EGL
是
OpenGL ES
和本地窗口系统的接口,不同平台上EGL
配置是不一样的,而OpenGL
的调用方式是一致的,就是说:OpenGL
跨平台就是依赖于EGL
接口。
我的得理解是:在一个平台上搭建OpenGL
的环境。
为什么要自己创建EGL环境?
有的人会想,在android里面系统已经提供了
GLSurfaceView
,已经有了EGL
环境,我们为什么还要自己搭建这个环境呢?
当我们需要把同一个场景渲染到不同的Surface
上时,此时系统GLSurfaceView
就不能满足需求了,所以我们需要自己创建EGL
环境来实现渲染操作。
注意:OpenGL
整体是一个状态机,通过改变状态就能改变后续的渲染方式,而EGLContext(EgL上下文)
就保存有所有状态,因此可以通过共享EGLContext
来实现同一场景渲染到不同的Surface
上。
Android
配置egl
环境我们根据GLSurfaceView
源码来实现。在GLSurfaceView
源码里面,当调用setRenderer
的时候会开启一个线程GLThread
,GLThread
调用start
的时候会初始化EglHelper
来配置egl
环境,然后一个while(true)
执行,根据不同的标识判断执行egl
的环境配置,Renderer
的onSurfaceCreated
,onSurfaceChanged
,onDrawFrame
等函数。
从源码得知我们配置egl
环境主要根据GLSurfaceView.EglHelper
来写,主要分为已下几步:
1、得到Egl实例
2、得到默认的显示设备(就是窗口)
3、初始化默认显示设备
4、设置显示设备的属性
5、从系统中获取对应属性的配置
6、创建EglContext
7、创建渲染的Surface
8、绑定EglContext和Surface到显示设备中
9、刷新数据,显示渲染场景
最终代码如下:
EglHelper.java
1 |
|