在android中要使用openGL ES非常便利, 利用GLSurfaceView类即可, 只需要调用setRenderer来设置GLSurfaceView.Renderer。如下所示:
public class MainActivity extends AppCompatActivity implements GLSurfaceView.Renderer{
GLSurfaceView surfaceView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
surfaceView = new GLSurfaceView(this);
surfaceView.setRenderer(this);
setContentView(surfaceView);
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
}
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
}
}
GLSurfaceView.Renderer 定义了一个统一图形绘制的接口,有如下三个接口函数:
public interface Renderer {
void onSurfaceCreated(GL10 gl, EGLConfig config);
void onSurfaceChanged(GL10 gl, int width, int height);
void onDrawFrame(GL10 gl);
}
其中:
- onSurfaceCreated:用来设置一些绘制时不常变化的参数,比如:背景色,是否打开 z-buffer 等;
- onDrawFrame: 定义实际的绘图操作;
- onSurfaceChanged:如果设备支持屏幕横向和纵向切换,这个方法将发生在横向与纵向互换时重新设置绘制的纵横比率。
在上面的例子中,用到了
void glClearColor(
float red,
float green,
float blue,
float alpha
);
与
void glClear(
int mask
);
两个函数。
其中glClearColor指定刷新颜色缓冲区时所用的颜色, 而glClear(GL10.GL_COLOR_BUFFER_BIT)将缓存清除为预先的设置值。运行上诉代码,可看到红色的背景界面。