android的GLSurfaceView

Android中使用GLSurfaceView初始化opengl es, GLSurfaceView会处理opengl es初始化过程中比较基本的操作,比如:

  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);			
	}

}

转载于:https://my.oschina.net/u/1273706/blog/746414

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值