Android OpenGL初体验

来源:互联网 发布:编程pmc 编辑:程序博客网 时间:2024/06/05 15:37

Android OpenGL初体验

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

1、创建OpenGL应用

创建一个新的Activity,定义GLSurfaceView对象,在setContentView中加入GLSurfaceView对象。
public class OpenGLHelloWorldActivity extends Activity {private GLSurfaceView mSurfaceView;private boolean mRender = false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mSurfaceView = new GLSurfaceView(this);setContentView(mSurfaceView);}}

2、生命周期

在onResume和onPause中加入GLSurfaceView的资源启用和释放,mRender控制是否开始渲染。
@Overrideprotected void onResume() {super.onResume();if (mRender) {mSurfaceView.onResume();}}@Overrideprotected 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.0mSurfaceView.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 {@Overridepublic void onSurfaceCreated(GL10 gl, EGLConfig config) {// 清空屏幕颜色,参数对应红色、绿色、蓝色和透明度// 显示为红色GLES20.glClearColor(1, 0, 0, 0);//gl.glClearColor(1, 0, 0, 0);}@Overridepublic void onSurfaceChanged(GL10 gl, int width, int height) {// 设置视图尺寸GLES20.glViewport(0, 0, width, height);//gl.glViewport(0, 0, width, height);}@Overridepublic void onDrawFrame(GL10 gl) {// 清空屏幕GLES20.glClear(GL10.GL_COLOR_BUFFER_BIT);//gl.glClear(GL10.GL_COLOR_BUFFER_BIT);}}

显示如下

原创粉丝点击