Android中使用GLSurfaceView初始化opengl es, GLSurfaceView會處理opengl es初始化過程當中比較基本的操做,好比:ide
咱們須要爲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); } }