AndroidOpenGLESDemos Hello World-GLSurfaceView 顯示背景色

目錄

一、效果

二、GLSurfaceView

三、渲染

四、注意

五、相關參考

六、代碼地址


一、效果

二、GLSurfaceView

GLSurfaceView從Android 1.5(API level 3)開始加入,繼承自SurfaceView,實現了SurfaceHolder.Callback2接口,擁有SurfaceView的全部特性,也有view所有的功能和屬性,特別是處理事件的能力,它主要是在SurfaceView的基礎上它加入了EGL的管理,並自帶了一個GLThread繪製線程(EGLContext創建GL環境所在線程即爲GL線程),繪製的工作直接通過OpenGL在繪製線程進行,不會阻塞主線程,繪製的結果輸出到SurfaceView所提供的Surface上,這使得GLSurfaceView也擁有了OpenGlES所提供的圖形處理能力,通過它定義的Render接口,使更改具體的Render的行爲非常靈活性,只需要將實現了渲染函數的Renderer的實現類設置給GLSurfaceView即可。

三、渲染

創建一個GLSurfaceView的子類,添加到父View中,之後的操作主要在Renderer類中。

        private void init(Context context) {
            this.setEGLContextClientVersion(2); // 設置使用OPENGL ES3.0
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                setPreserveEGLContextOnPause(true);//如果沒有這一句,那onPause之後再onResume屏幕將會是黑屏滴
            }
            setRenderer(mRenderer);//設置渲染器
            setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);//請求的時候纔去渲染一次;RENDERMODE_CONTINUOUSLY爲持續渲染
        }
        /**
         * 渲染器
         */
        private Renderer mRenderer = new Renderer() {

            @Override
            public void onSurfaceCreated(GL10 gl, EGLConfig config) {
                GLES20.glClearColor(1.0f, 1.0f, 0.0f, 1.0f);//設置背景色,黃色
            }

            @Override
            public void onSurfaceChanged(GL10 gl, int width, int height) {
//                GLES20.glViewport(0, 0, width, height);
            }

            @Override
            public void onDrawFrame(GL10 gl) {
                //清楚深度緩存和顏色緩存
                GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
            }
        };

如上,無需過多操作,就能設置整個GLView的背景顏色,其中glClearColor爲設置清屏時的顏色。而glClear中的GL_COLOR_BUFFER_BIT掩碼則表示用glClearColor指定的顏色來清屏。

四、注意

1.在Activity的生命週期中的onResume和onPause時分別調用GLSurfaceView的onResume和onPause,以便GLSV釋放資源。

2.glClearColor中每個元素的取值範圍爲[0f,1f]。

五、相關參考

glClearColorglClear

六、代碼地址

https://github.com/flycatdeng/KarenJar/blob/master/app/src/main/java/com/karenjar/demo/opengl/BackgroundAty.java

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章