美文网首页
Android OpenGL ES

Android OpenGL ES

作者: 在途老马 | 来源:发表于2014-02-19 16:22 被阅读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.

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

    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>
      同样会使不支持的设备无法安装

    相关文章

      网友评论

          本文标题:Android OpenGL ES

          本文链接:https://www.haomeiwen.com/subject/biuhtttx.html