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 contextsetEGLContextClientVersion(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.EnvGLSurfaceViewandroid: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环境搭建