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);
}
}