工具安裝
-
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 {
在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、我們需要設置生命周期,否則會出現崩潰或者程序無法運行。它才可以在后台繼續渲染或者是正常停止。
上面代碼可以正常執行,主要因為是它也可以支持聲明周期的緣故。其實在這里我們為了保險起見,我們可以進行判斷,判斷之后在執行聲明周期操作。
創建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 onDrawFrame(GL10 arg0) {
// TODO Auto-generated method stub
glClear(GL_COLOR_BUFFER_BIT);
}
GLSurfaceView是一個線程來渲染的,在主線程中只做一個調用,默認會以刷新頻率進行刷新不斷渲染。
上面主要介紹了GLSurfaceView在java中連接java程序和OpenGLes的使用,GLSurfaceView設置渲染器,通過渲染器進行頁面屬性的設置。
錯誤方法
在頂點和片段着色器中,向GPU着色程序或者片段着色器,由於在開發者色器腳本文件中國的代碼,沒有一個實時地編譯個運行的差錯,所以寫一個檢查方法。
做了什么??
1.安裝環境
2.為后面做准備,創建一個簡單的案例
3.渲染的基本步驟。