Android OpenGL初体验
首先申明下,本文为笔者学习《OpenGL ES应用开发实践指南》的笔记,并加入笔者自己的理解和归纳总结。
1、创建OpenGL应用
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.0ActivityManager 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调用
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);
}
}
显示如下