openGLES(一)


准備工作

 

工具安裝

  • jdk安裝

  • sdk安裝

  • IDE開發環境

  • 一個手機

    推薦使用真機,它可以反映真實的性能和結果。

     

    虛擬機創建

    • Android SDK 執行SDK Manager.exe

    • Tools--> Manage AVDS

    • new

    GLSurfaceView

  • 他是一個特殊的類初始化OpenGL,可以處理OpenGLES的基本操作,,渲染器可以在一個稱為surface的里面完成。渲染是在一個“surface”的特定區域中完成的,也就是視口。

  • 它可以輕松的管理聲明周期。

  • GLSurfaceView是沒有動畫和特效的。可以使用TextView,TextView可以通過GLSurfaceView轉換.或者直接使用TextView。

    回顧聲明周期

    create:創建 destroy:銷毀 pause:暫停 resume:回來繼續。

創建程序

1.創建一個項目

2.初始化OpenGL

  • 使用一個特殊的類GKSurfaceView進行初始化,他會初始化比較基本的操作

  • GLSurfaceView類也可以使用activity的生命周期方法。


public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

在MainActivity中引入GLSurfaceView


//引入一個gLSurfaceView
private GLSurfaceView gLSurfaceView;
//設置GLSurfaceView的狀態
private boolean renderSet = false;

我們去掉本身的setContentView,初始化GLSurfaceView。

下來需要在生命周期中初始化GLSurfaceView對象。


glSurfaceView = new GLSurfaceView(this);

 

下來為了可以使用GLSurfaceView,或者是否支持,進行判斷,是否支持使用GLSurfaceView,並設置它使用的版本號。

  • 首先獲得activityManager通過service獲得。

  • 得到相關的配置信息。

  • 判斷GLES的版本是否大於2.

  • 然后設置使用的版本【這個版本可以在配置中設置】

  • 就可以使用渲染器進行渲染了。


final ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();
final boolean supportsEs2 = configurationInfo.reqGlEsVersion>=0x20000;

根據supportsEs2的返回值得出是否支持OpenGLEs,如果支持設置版本,這個可以在配置文件中設置。


if(supportsEs2) {
gLSurfaceView.setEGLContextClientVersion(2);
renderSet=true;
}else {
Toast.makeText(this, "不支持", Toast.LENGTH_LONG).show();
return ;
}

並且設置OpenGlES標志位。

GLSurfaceView基本設置完畢,下來設置Renderer類,通過gLSurface.setRender新實例。通過標志參數可以在知道,renderer已經設置過了。下來如果發生改變,或者是啟動,那么這個渲染器就會被調用。


gLSurfaceView.setRenderer(new MyRenderer());

將GLsurfaceView設置到activity中去。


setContentView(gLSurfaceView); 以上步驟已經將GL設置完畢,並且將渲染器也設置完成,下來講GL輸出到屏幕上。

2、我們需要設置生命周期,否則會出現崩潰或者程序無法運行。它才可以在后台繼續渲染或者是正常停止。


@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
gLSurfaceView.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
gLSurfaceView.onResume();
}

上面代碼可以正常執行,主要因為是它也可以支持聲明周期的緣故。其實在這里我們為了保險起見,我們可以進行判斷,判斷之后在執行聲明周期操作。


創建Renderer

創建一個渲染器,渲染器的創建有三個方法。


- 繪制時
- 一定會繪制 即使是空屏幕
- 因為緩存區會被交換,並顯示 如果沒有數據顯示。那么將會出現閃鎖
- 這個就是每次都會執行,每畫一陣就會執行一次。
@Override
public void onDrawFrame(GL10 arg0) {
// TODO Auto-generated method stub
}
- 屏幕尺寸發生變化的時候   橫豎屏切換
@Override
public void onSurfaceChanged(GL10 arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
- 創建一定會執行  
- 設備喚醒,或者其他的activity跳轉過來的時候,可能會執行,執行聲明周期的時候會執行。
- 被調用多次
@Override
public void onSurfaceCreated(GL10 arg0, EGLConfig arg1) {
// TODO Auto-generated method stub
}

方法使用:

設置清空屏幕的顏色


public void onSurfaceCreated(GL10 arg0, EGLConfig arg1) {
// TODO Auto-generated method stub
glClearColor(1.0f,1.0f,1.0f,1.0f);
}

設置窗口的大小 視口,也就是每次顯示的時候顯示窗口的大小。


@Override
public void onSurfaceChanged(GL10 arg0, int width, int height) {
// TODO Auto-generated method stub
glViewport(0,0,width,height);
}

將屏幕清空,並將之前的顏色填充進來。


@Override
public void onDrawFrame(GL10 arg0) {
// TODO Auto-generated method stub
glClear(GL_COLOR_BUFFER_BIT);
}

GLSurfaceView是一個線程來渲染的,在主線程中只做一個調用,默認會以刷新頻率進行刷新不斷渲染。

上面主要介紹了GLSurfaceView在java中連接java程序和OpenGLes的使用,GLSurfaceView設置渲染器,通過渲染器進行頁面屬性的設置。

 

錯誤方法

​ 在頂點和片段着色器中,向GPU着色程序或者片段着色器,由於在開發者色器腳本文件中國的代碼,沒有一個實時地編譯個運行的差錯,所以寫一個檢查方法。


做了什么??

1.安裝環境

2.為后面做准備,創建一個簡單的案例

3.渲染的基本步驟。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM