Android中使用GLSurfaceView初始化opengl es, GLSurfaceView会处理opengl es初始化过程当中比较基本的操做,好比:ide
咱们须要为GLSurfaceView提供Renderer,Renderer中有三个回调接口,onSurfaceCreated, onSurfaceChanged, onDrawFragme,这些接口须要开发人员实现。前两个容易理解,分部是一个绘制的窗口刚刚被建立的时候,和这个窗口的大小发生改变的时候。咱们须要注意的是onDrawFrame,咱们须要在这个函数中绘制一些东西,后台的渲染线程会的调用这个函数。
在默认状况下GLSurfaceView的后台渲染线程中以显示设备的刷新频率不断的渲染,固然,也能够配置为按请求渲染,只须要用GLSurfaceView.RENDERMODE_WHEN_DIRTY做为GLSurfaceView.setRenderMode()的参数,而后在你须要界面渲染的时候,调用GLSurfaceView.requestRender()。
public class MainActivity extends Activity { private GLSurfaceView view; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); view = new GLSurfaceView(this); FirstOpenglRender render = new FirstOpenglRender(); //设置为opengl es 2.0的context view.setEGLContextClientVersion(2); //RGBA位数都为8,深度缓冲区的位数是16,模板缓冲区的位数是0 view.setEGLConfigChooser(8, 8, 8, 8, 16, 0); view.setRenderer(render); setContentView(view); } @Override protected void onPause() { super.onPause(); view.onPause(); } @Override protected void onResume() { super.onResume(); view.onResume(); } }
GLSurfaceView提供了针对Acitvity生命周期的函数调用,好比Activity出于onPause状态的时候,咱们是否是该调用GLSurfaceView的onPause函数,中止后台渲染线程的工做呢?函数
public class FirstOpenglRender implements Renderer { @Override public void onSurfaceCreated(GL10 arg0, EGLConfig arg1) { //用红色清空屏幕 GLES20.glClearColor(1F, 0F, 0F, 0F); } @Override public void onSurfaceChanged(GL10 arg0, int width, int height) { //设置视口 GLES20.glViewport(0, 0, width, height); } @Override public void onDrawFrame(GL10 arg0) { //清空屏幕,擦除屏幕上全部的颜色,用GLES20.glClearColor(1F, 0F, 0F, 0F)中定义的颜色填充屏幕 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); } }