Github项目地址,欢迎star~!
为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过更新会慢一些
初始化OpenGL ES环境
OpenGL ES的使用,一般包括如下几个步骤:
1. EGL Context初始化
2. OpenGL ES初始化
3. OpenGL ES设置选项与绘制
4. OpenGL ES资源释放(可选)
5. EGL资源释放
Android平台提供了一个GLSurfaceView,来帮助使用者完成第一步和第五步,由于释放EGL资源时会自动释放之前申请的OpenGL ES资源,所以需要我们自己做的就只有2和3。
使用GLSurfaceView
首先,我们在主布局中引入一个GLSurfaceView,并让他充满整个布局,并在Activity中获取他的实例
<android.opengl.GLSurfaceView
android:id="@+id/surface_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
public class MainActivity extends AppCompatActivity {
private GLSurfaceView glSurfaceView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
glSurfaceView= (GLSurfaceView) findViewById(R.id.surface_view);
}
}
获取实例以后,我们就可以对于这个GLSurfaceView进行配置:
glSurfaceView.setEGLContextClientVersion(2);
glSurfaceView.setRenderer(new GLRenderer());
glSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
第一行是设置EGL上下文的客户端版本,因为我们使用的是OpenGL ES 2.0,所以设置为2
第二行代表渲染模式,选项有两种(大家应该能看懂英文的介绍),一个是需要渲染(触控事件,渲染请求)才渲染,一个是不断渲染。
/**
* The renderer only renders
* when the surface is created, or when {@link #requestRender} is called.
*
* @see #getRenderMode()
* @see #setRenderMode(int)
* @see #requestRender()
*/
public final static int RENDERMODE_WHEN_DIRTY = 0;
/**
* The renderer is called
* continuously to re-render the scene.
*
* @see #getRenderMode()
* @see #setRenderMode(int)
*/
public final static int RENDERMODE_CONTINUOUSLY = 1;
这个GLRenderer是个什么鬼?其实这是我们自定义的一个类,