[Android] OpenGL ES 介绍及环境搭建

OpenGL ES 简介

OpenGL ES 是针对嵌入式设备的图形 API,为 3D 处理硬件指定了一个标准的软件接口。Android 支持多种版本的 OpenGL ES API:

OpenGL ES 1.0和1.1 – Android 1.0及更高版本支持此API规范。
OpenGL ES 2.0 – Android 2.2(API级别8)及更高版本支持此API规范。
OpenGL ES 3.0 – Android 4.3(API级别18)及更高版本支持此API规范。
OpenGL ES 3.1 – Android 5.0(API级别21)及更高版本支持此API规范。

通常来说 OpenGL ES 2.0 和 OpenGL ES 3.0 提供了比 OpenGL ES 1.0 更好更快的图形处理性能,但是为了适配更多机型我们不得不选用适配较多机型的 API。到目前为止更为广泛使用的是 OpenGL ES 2.0,所以我们接下来的文章均采用 OpenGL ES 2.0。

环境搭建

1、声明

我们如果需要使用 OpenGL ES,需要在 Manifest 文件中声明,声明如下:

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

以上为使用 OpenGL ES 2.0 的声明,如果需要使用 OpenGL ES 3.0 则需要以下声明:

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

2、构建 GLSurfaceView 对象

GLSurfaceView 可以用来绘制 OpenGL 的图像,内部主要通过 GLSurfaceView.Renderer 来控制的:

public class MyGLSurfaceView extends GLSurfaceView {
    private MyGLRenderer mRenderer;
    public MyGLSurfaceView(Context context) {
        super(context);

        // 创建一个 OpenGL ES 2.0 的上下文
        setEGLContextClientVersion(2);

        mRenderer = new MyGLRenderer();

        // 设置用来绘制图像的 Renderer
        setRenderer(mRenderer);
    }
}

3、构建渲染器

GLSurfaceView.Renderer 才是真正能够使用在 OpenGL ES 中的,包含三个方法可被系统调用:

onSurfaceCreated() – 调用一次以设置视图的OpenGL ES环境。
onDrawFrame() – 调用每次重绘视图。
onSurfaceChanged() – 如果视图的几何图形发生更改,则会调用,例如,当设备的屏幕方向发生更改时。

以下是绘制一个黑色背景的代码:

public class MyGLRenderer implements GLSurfaceView.Renderer {
    @Override
    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {
        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    }

    @Override
    public void onSurfaceChanged(GL10 gl10, int width, int height) {
        GLES20.glViewport(0, 0, width, height);
    }

    @Override
    public void onDrawFrame(GL10 gl10) {
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    }
}

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注