android的GLSurfaceView

Android中使用GLSurfaceView初始化opengl es, GLSurfaceView会处理opengl es初始化过程当中比较基本的操做,好比:ide

  1. 配置egl,egl提供了opengl es和系统原生窗口之间的一个结合层次,与系统的原生窗口通讯,将opengl es的绘制最终展示给用户。
  2. 在后台线程中渲染,此处要注意,opengl es的渲染不是在UI主线程中,而是在后台另外启动了一个线程。两个线程之间的通讯能够用以下方法:在主线程中调用GLSurfaceView的queueEvent()函数传递一个runnable给后台渲染线程;后台渲染线程能够调用Activity的runOnUIThread()来传递事件给主线程。
  • 咱们须要为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);			
	}

}
相关文章
相关标签/搜索