Android OpenGL ES

2014-02-19  本文已影响1638人  在途老马

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需要实现的方法

  1. onSurfaceCreated()
    创建GLSurfaceView的时候调用一次,通常用来设置OpenGL参数或初始化OpenGL图形对象。
  2. onDrawFrame()
    每次重画都会调用这个方法。
  3. 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.

javax.microedition.khronos.opengles - This package provides the standard implementation of OpenGL ES 1.0/1.1.

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 需求

  1. 版本
    2.0

    <uses-feature android:glEsVersion="0x00020000" android:required="true" />

3.0

<uses-feature android:glEsVersion="0x00030000" android:required="true" />

这个声明会导致不支持该版本的设备无法安装。

  1. 文本压缩
    <supports-gl-texture>
    同样会使不支持的设备无法安装
上一篇下一篇

猜你喜欢

热点阅读