android.opengl.GLSurfaceView.Renderer概述

 

android.opengl.GLSurfaceView.Renderer概述

 

翻譯至android.opengl.GLSurfaceView.Renderer Class Overview,水平有限,敬請諒解

[email protected]

 

        這是渲染器(Render)的公共接口,它的任務就是調用OpenGL的API來作幀的渲染。GLSurfaceView的實現類通常會創建一個Render的實現類,然後用setRenderer(GLSurfaceView.Renderer)方法把渲染器註冊到GLSurfaceView。

 

線程

        把渲染代碼分開,讓它運行在單獨的線程裏,這樣的設計是爲了讓渲染性能不受UI線程的影響。UI線程裏的各種實例通常需要跟渲染器通訊,例如鍵盤、鼠標等輸入事件,這時候應當進行跨線程通訊,或使用queueEvent(Runnable)方法。

 

EGL context丟失

        很多情況下EGL的context會丟失,例如設備的休眠和喚醒。context丟失後,與之相關的各種OpenGL資源(如:紋理)都將自動刪除。爲了確保設備再次喚醒後能正常渲染,渲染器應該重建各種資源。一般來說,重建資源的代碼會放在surface被創建的函數onSurfaceCreated(GL10, EGLConfig)裏。

 

        參見

        setRenderer(Renderer)

 

公共方法一覽        

        abstract void onDrawFrame(GL10 gl)     當要求繪製一幀時.

        abstract void onSurfaceChanged(GL10 gl, int width, int height)     當surface大小變換時.

        abstract void onSurfaceCreated(GL10 gl, EGLConfig config)   當surface創建或重建時.

 

公共方法

        public abstract void onDrawFrame (GL10 gl)

        當要求繪製一幀時被調用。

        這裏通常放置幀繪製的代碼,通常會這樣寫。

         void onDrawFrame(GL10 gl) {

             gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

             //... 其它代碼 ...

         }

        參數

         gl GL接口,可以使用instanceof方法判斷是否支持GL11或更高版本。

 

        public abstract void onSurfaceChanged (GL10 gl, int width, int height)

        surface創建後,當surface大小變換時被調用。

        一般來說,要在這裏設定視口(viewport),如果你的攝像機是固定的,也可以在這裏設定投影矩陣(projection matrix)。

         void onSurfaceChanged(GL10 gl, int width, int height) {

             gl.glViewport(0, 0, width, height);

             // 對於固定攝像機,就在這裏設定投影矩陣

             float ratio = (float) width / height;

             gl.glMatrixMode(GL10.GL_PROJECTION);

             gl.glLoadIdentity();

             gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);

         }

        參數

                gl 同上

 

        public abstract void onSurfaceCreated (GL10 gl, EGLConfig config)

        當surface創建或重建時被調用。

        Android設備休眠後EGL context會丟失,喚醒後context會重建,該方法會被調用,然後再開始渲染。一般來說,要在這裏重建資源。

        注意,EGL context丟失後,OpenGL的資源會自動刪除,你不需要使用glDeleteTextures之類的方法來手動刪除資源。

        參數

                gl 同上

                config 創建或重建後的EGL配置,用來創建各種相關緩存。

 

發佈了26 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章