Android OpenGLES2.0开发(二):环境搭建
世界没有悲剧和喜剧之分,如果你能从悲剧中走出来,那就是喜剧,如果你沉缅于喜剧之中,那它就是悲剧。——科马克·麦卡锡《路》
OpenGL ES环境搭建
Android 应用中使用 OpenGL ES 绘制图形,必须创建一个显示容器。我们需要同时实现 GLSurfaceView
和 GLSurfaceView.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环境搭建