Android OpenGL初体验

Android OpenGL初体验

首先申明下,本文为笔者学习《OpenGL ES应用开发实践指南》的笔记,并加入笔者自己的理解和归纳总结。

1、创建OpenGL应用

创建一个新的Activity,定义GLSurfaceView对象,在setContentView中加入GLSurfaceView对象。
public class OpenGLHelloWorldActivity extends Activity {
	private GLSurfaceView mSurfaceView;
	private boolean mRender = false;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		mSurfaceView = new GLSurfaceView(this);
		setContentView(mSurfaceView);
	}

}

2、生命周期

在onResume和onPause中加入GLSurfaceView的资源启用和释放,mRender控制是否开始渲染。
@Override
protected void onResume() {
	super.onResume();
	if (mRender) {
		mSurfaceView.onResume();
	}
}

@Override
protected void onPause() {
	super.onPause();
	if (mRender) {
		mSurfaceView.onPause();
	}
}

3、系统支持

判断系统是否支持OpenGL ES 2.0
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ConfigurationInfo confInfo = am.getDeviceConfigurationInfo();
boolean supportEs2 = confInfo.reqGlEsVersion >= 0x20000;

if (supportEs2) {
	// 选择OpenGL ES 2.0
	mSurfaceView.setEGLContextClientVersion(2);
	// 设置渲染
	mSurfaceView.setRenderer(new OpenGLHelloWorldRender());
	mRender = true;
} else {
	Toast.makeText(this , "This device does not support OpenGL ES 2.0",
				Toast.LENGTH_LONG).show();
}

4、自定义渲染类OpenGLHelloWorldRender

Render中定义了三个方法
  • onSurfaceCreated:当SurfaceView被创建时,GLSurfaceView会调用此方法。
  • onSurfaceChanged:当SurfaceView被创建后,每次Surface尺寸变化时,这个方法都会被调用
  • onDrawFrame:当绘制一帧时,这个方法会被GLSurfaceView调用
GL10是OpenGL ES 1.0遗留下来的,在OpenGL ES 2.0中,GLES20类提供了静态方法。
private class OpenGLHelloWorldRender implements GLSurfaceView.Renderer {

	@Override
	public void onSurfaceCreated(GL10 gl, EGLConfig config) {
		// 清空屏幕颜色,参数对应红色、绿色、蓝色和透明度
		// 显示为红色
		GLES20.glClearColor(1, 0, 0, 0);
//		gl.glClearColor(1, 0, 0, 0);
	}

	@Override
	public void onSurfaceChanged(GL10 gl, int width, int height) {
		// 设置视图尺寸
		GLES20.glViewport(0, 0, width, height);
//		gl.glViewport(0, 0, width, height);
	}

	@Override
	public void onDrawFrame(GL10 gl) {
		// 清空屏幕
		GLES20.glClear(GL10.GL_COLOR_BUFFER_BIT);
//		gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
	}

}

显示如下

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值