Android OpenGLES2.0开发(二):环境搭建

240 阅读2分钟

世界没有悲剧和喜剧之分,如果你能从悲剧中走出来,那就是喜剧,如果你沉缅于喜剧之中,那它就是悲剧。——科马克·麦卡锡《路》

OpenGL ES环境搭建

Android 应用中使用 OpenGL ES 绘制图形,必须创建一个显示容器。我们需要同时实现 GLSurfaceViewGLSurfaceView.Renderer接口。 GLSurfaceView 是使用 OpenGL 绘制图形的视图容器, GLSurfaceView.Renderer 用于控制该视图中绘制的内容。

1. 在清单中声明 OpenGL ES 的使用

在清单文件中声明使用OpenGL ES 2.0 API

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

2. 创建GLSurfaceView

public class EnvGLSurfaceView extends GLSurfaceView {

    private Context mContext;
    private MyGLRenderer mRenderer;

    public EnvGLSurfaceView(Context context) {
        super(context);
        init(context);
    }

    public EnvGLSurfaceView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    private void init(Context context) {
        mContext = context;
        // 创建OpenGL ES 2.0 context
        setEGLContextClientVersion(2);

        mRenderer = new MyGLRenderer();

        // 设置渲染器
        setRenderer(mRenderer);
        // 设置渲染模式:仅当图形数据发生更改时渲染视图
        setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
    }
}

3. 创建渲染类Renderer

GLSurfaceView.Renderer 类(即渲染程序)的实现,他包含了三个接口

  • onSurfaceCreated:该方法中可以用来初始化数据等操作
  • onDrawFrame:该方法中编写我们要绘制的内容
  • onSurfaceChanged:当视图大小发生变化时,我们需要重新设置窗口大小
static class MyGLRenderer implements GLSurfaceView.Renderer {

    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
        // 设置背景颜色为红色
        GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
    }

    public void onDrawFrame(GL10 unused) {
        // 设置红色清屏
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    }

    public void onSurfaceChanged(GL10 unused, int width, int height) {
    	// 修改OpenGL ES窗口大小
        GLES20.glViewport(0, 0, width, height);
    }
}

4. 添加布局显示

将我们定义的MyGLSurfaceView加入到布局中

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".GLEnvActivity">

    <com.android.xz.opengldemo.view.EnvGLSurfaceView
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

启动Activity显示界面如下:

恭喜你^_^你已经成功搭建好了OpenGL ES的开发环境,是不是很简单呢?我们将在接下来的章节中会详细介绍onDrawFrame中绘制各种图形图像

最后

本章节我们搭建了OpenGL ES的开发环境,GLSurfaceView实际上已经帮我们把OpenGL核心环境搭建完成,我们只需要实现渲染接口即可。如果你想更加自由的使用OpenGL ES,可以使用SurfaceView或者TextureView,但是需要您自行搭建EGL环境,请参考该篇文章,自行完整的搭建OpenGL ES环境:Android OpenGLES开发:EGL环境搭建

github:github.com/xiaozhi003/…