Android OpenGL ES
OpenGL ES API
ES表示Embedded System,是OpenGL针对嵌入式设备的专用版本。
OpenGL ES 1.0 & 1.1 -> Android 1.0 and heigher
OpenGL ES 2.0 -> Android 2.2 (API Level 8) and heigher
OpenGL ES 3.0 -> Android 4.3 (API level 18) and heigher
OpenGL ES 3.0 需要设备厂商支持,即使是4.3的android也有可能不支持 OpenGL ES 3.0 。
private static double glVersion = 3.0;
private static class ContextFactory implements GLSurfaceView.EGLContextFactory {
private static int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
public EGLContext createContext(
EGL10 egl, EGLDisplay display, EGLConfig eglConfig) {
Log.w(TAG, "creating OpenGL ES " + glVersion + " context");
int[] attrib_list = {EGL_CONTEXT_CLIENT_VERSION, (int) glVersion,
EGL10.EGL_NONE };
// attempt to create a OpenGL ES 3.0 context
EGLContext context = egl.eglCreateContext(
display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list);
return context; // returns null if 3.0 is not supported;
}
}
如果上述方法返回null,那么只能使用OpenGL ES 2.0 相关API。
// Create a minimum supported OpenGL ES context, then check:
String version = javax.microedition.khronos.opengles.GL10.glGetString(
GL10.GL_VERSION);
Log.w(TAG, "Version: " + version );
// The version format is displayed as: "OpenGL ES <major>.<minor>"
// followed by optional content provided by the implementation.
上面的代码创建了最低版本的Context,之后检查支持的版本。
OpenGL ES 基础
有两种方式使用:framework API 和 Native Development Kit
Android Framework API
GLSurfaceView
可以使用OpenGL ESAPI的View对象。与SurfaceView相似,可以创建这个对象的实例,之后添加到Render中。但是这个View不支持触摸事件,如果需要,则需要扩展这个累自己实现。
添加touch事件
GLSurfaceView.Render
GLSurfaceView 中绘图所需要的方法。
通过GLSurfaceView.setRenderer()方法设置。
GLSurfaceView.Render需要实现的方法
- onSurfaceCreated()
创建GLSurfaceView的时候调用一次,通常用来设置OpenGL参数或初始化OpenGL图形对象。 - onDrawFrame()
每次重画都会调用这个方法。 - onSurfaceChanged()
几何变化时调用这个方法,例如改变大小,设备横竖屏变化,
OpenGL ES 软件包
OpenGL ES 1.0/1.1 API Packages
android.opengl - This package provides a static interface to the OpenGL ES 1.0/1.1 classes and better performance than the javax.microedition.khronos package interfaces.
- GLES10
- GLES10Ext
- GLES11
- GLES11Ext
javax.microedition.khronos.opengles - This package provides the standard implementation of OpenGL ES 1.0/1.1.
- GL10
- GL10Ext
- GL11
- GL11Ext
- GL11ExtensionPack
OpenGL ES 2.0 API Class
android.opengl.GLES20 - This package provides the interface to OpenGL ES 2.0 and is available starting with Android 2.2 (API level 8).
OpenGL ES 3.0 API Class
android.opengl.GLES30 - This package provides the interface to OpenGL ES 3.0 and is available starting with Android 4.3 (API level 18).
声明OpenGL 需求
- 版本
2.0
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
3.0
<uses-feature android:glEsVersion="0x00030000" android:required="true" />
这个声明会导致不支持该版本的设备无法安装。
- 文本压缩
<supports-gl-texture>
同样会使不支持的设备无法安装