部分内容摘自其他博客,请见最下[参考资料]
首先来看看Android官方对EGL的解释:
OpenGL ES 定义了一个渲染图形的 API,但没有定义窗口系统。为了让 GLES 能够适合各种平台,GLES 将与知道如何通过操作系统创建和访问窗口的库结合使用。用于 Android 的库称为 EGL。如果要绘制纹理多边形,应使用 GLES 调用;如果要在屏幕上进行渲染,应使用 EGL 调用。
OpenGL ES 是Android绘图API,但OpenGL ES是平台通用的,在特定设备上使用需要一个中间层做适配,这个中间层就是EGL。
EGL架构
Display(EGLDisplay) 是对实际显示设备的抽象。
Surface(EGLSurface)是对用来存储图像的内存区域 FrameBuffer 的抽象,包括 Color Buffer, Stencil Buffer ,Depth Buffer。
Context (EGLContext) 存储 OpenGL ES绘图的一些状态信息。
Android中的OpenGL 与EGL
Android 2.0版本之后图形系统的底层渲染均由OpenGL负责,OpenGL除了负责处理3D API调用,还需负责管理显示内存及处理Android SurfaceFlinger或上层应用对其发出的2D API调用请求。
本地代码:
frameworks/native/opengl/libs/EGL
Android EGL框架,负责加载OpenGL函数库和EGL本地实现。
frameworks/native/opengl/libagl
Android提供的OpenGL软件库
JNI代码:
frameworks/base/core/jni/com_google_android_gles_jni_EGLImpl.cpp
EGL本地代码的JNI调用接口
frameworks/base/core/jni/com_google_android_gles_jni_GLImpl.cpp
frameworks/base/core/jni/android_opengl_GLESXXX.cpp
OpenGL功能函数的JNI调用接口
Java代码:
frameworks/base/opengl/java/javax/microedition/khronos/egl
frameworks/base/opengl/java/javax/microedition/khronos/opengles
frameworks/base/opengl/java/com/google/android/gles_jni/
frameworks/base/opengl/java/android/opengl
EGL和OpenGL的Java层接口,提供给应用开发者,通过JNI方式调用底层函数。
首先从Native代码入手: frameworks/native/opengl/libs/EGL,该目录下文件如图所示