Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android API Guides---OpenGL ES

Android API Guides---OpenGL ES

編輯:關於Android編程

OpenGL ES

Android包括高性能2D和3D圖形開放圖形庫(OpenGL?的),具體而言,OpenGL ES的API支持。 OpenGL是一個跨平台的圖形API,用於指定的3D圖形處理硬件標准的軟件接口。 ES是用於嵌入式設備的OpenGL規范的味道??。 Android支持OpenGL ES的API的幾個版本:


的OpenGL ES 1.0和1.1 - 本API規范是由Android 1.0及更高版本支持。
OpenGL ES 2.0的 - 這個API規范由Android 2.2的(API 8級)或更高版本支持。
的OpenGL ES 3.0 - 本API規范是由Android 4.3(API級別18)和更高的支持。
的OpenGL ES 3.1 - 這個API規范由是Android 5.0(API級別21)和更高的支持。
注意:在設備上的OpenGL ES 3.0 API的支持,需要由設備制造商提供了這個圖形管線的實現。運行Android 4.3或更高版本的設備可能不支持的OpenGL ES 3.0 API。有關檢查在運行時支持哪些版本的OpenGL ES的信息,請參閱檢查OpenGL ES版本。


注意:由Android框架所提供的特定的API是類似於J2ME JSR239 OpenGL ES的API,但是是不相同的。如果您熟悉J2ME JSR239規范,對變化的警報。


基礎


Android的支持OpenGL既通過其框架API和原生開發套件(NDK)。本主題重點介紹了Android框架接口。有關NDK的更多信息,請參閱的Andr??oid NDK。


有兩個基礎班在Android框架,讓您創建和操縱符合OpenGL ES API的圖形:GLSurfaceView和GLSurfaceView.Renderer。如果你的目標是使用OpenGL在你的Andr??oid應用程序,了解如何實現一個活動,這些類應該是你的第一個目標。


GLSurfaceView
這個類是一個視圖,你可以繪制和操作使用OpenGL API調用的對象,並在功能上SurfaceView類似。您可以通過創建GLSurfaceView的實例,並增加你的渲染它使用這個類。但是,如果你想捕捉觸摸屏事件,您應該擴展GLSurfaceView類來實現觸摸監聽器,如圖OpenGL的訓練課中,響應觸摸事件。
GLSurfaceView.Renderer
此接口定義在GLSurfaceView繪制圖形所需要的方法。你必須提供這個接口作為一個單獨的類的實現,並使用GLSurfaceView.setRenderer其附加到您GLSurfaceView實例()。
該GLSurfaceView.Renderer接口,您需要實現以下方法:


onSurfaceCreated():創建GLSurfaceView時,系統調用這個方法一次。使用此方法來執行只需要發生一次的操作,如設置OpenGL的環境參數或初始化的OpenGL圖形對象。
onDrawFrame()系統調用的GLSurfaceView每個重繪此方法。使用此方法作為主要執行點繪制(並重新繪制)圖形對象。
onSurfaceChanged()系統調用此方法時,GLSurfaceView幾何變化,包括在GLSurfaceView的大小或設備屏幕的方向變化。例如,當設備從縱向變為橫向系統調用此方法。使用此方法可以在GLSurfaceView容器的變化做出反應。
OpenGL ES的包


一旦你建立了使用GLSurfaceView和GLSurfaceView.Renderer為OpenGL ES的容器視圖,您可以開始使用下面的類中調用OpenGL的API:


的OpenGL ES 1.0 / 1.1 API包
android.opengl - 這個包提供了一個靜態的界面比javax.microedition.khronos封裝接口的OpenGL ES 1.0 / 1.1類和更好的性能。
GLES10
GLES10Ext
GLES11
GLES11Ext
javax.microedition.khronos.opengles - 此軟件包提供了標准實施的OpenGL ES 1.0 / 1.1。
GL10
GL10Ext
GL11
GL11Ext
GL11ExtensionPack
的OpenGL ES 2.0 API類
android.opengl.GLES20 - 此軟件包提供接口的OpenGL ES 2.0,並開始提供Android 2.2的(API級別8)。
的OpenGL ES 3.0 / 3.1 API包
android.opengl - 此軟件包提供了接口的OpenGL ES 3.0 / 3.1類。 3.0版開始提供的Andr??oid 4.3(API等級18)。 3.1版開始提供的是Android 5.0(API等級21)。
GLES30
GLES31
GLES31Ext(Android的擴展包)
如果你想開始建設有OpenGL ES的應用程序向右走,遵循的OpenGL ES類顯示圖形。


聲明要求的OpenGL


如果應用程序使用的OpenGL功能,這些功能並非適用於所有的設備,你必須在你的Andr??oidManifest.xml文件這些要求。以下是最常見的OpenGL清單的聲明:


OpenGL ES版本的要求 - 如果你的應用需要OpenGL ES的特定版本,您必須通過如下圖所示添加以下設置你的清單聲明要求。
對於OpenGL ES 2.0的:

 


添加此聲明將使谷歌播放從被安裝在不支持OpenGL ES2.0標准的設備將應用程序限制。如果應用程序是專為支持的OpenGL ES3.0的設備,你也可以在你的清單中指定的:


對於OpenGL ES的3.0:

 

 


For OpenGL ES 3.1:

 

 


注:的OpenGL ES API 3.X與2.0 API,這意味著你可以與你的應用程序中實現的OpenGL ES的更靈活的向後兼容。通過聲明的OpenGL ES 2.0 API作為您清單的要求,您可以使用該API版本作為默認,檢查在運行時API 3.X的可用性,然後如果設備支持使用OpenGL ES 3.x的功能它。有關檢查設備所支持的OpenGL ES版本的更多信息,請參閱檢查OpenGL ES版本。


紋理壓縮的要求 - 如果應用程序使用的紋理壓縮格式,您必須使用<支持-GL紋理>聲明應用程序支持的格式,在你的清單文件。有關可用紋理壓縮??格式的更多信息,請參閱紋理壓縮支持。
在清單中聲明紋理壓縮需求隱藏您的用戶不支持您的聲明壓縮類型的至少一個器件中的應用。有關谷歌Play如何過濾功能紋理壓縮的更多信息,請參閱谷歌Play和<支撐-GL紋理>文件的紋理壓縮過濾部分。
貼圖坐標繪制的對象


其中一個在Android設備上顯示圖形的基本問題是,他們的屏幕可以在大小和形狀各不相同。 OpenGL的承擔方,統一坐標系統,默認情況下,興致勃勃地繪制這些坐標到您的典型的非方形屏幕,就好像它是完美的正方形。

 

\

圖1.默認OpenGL的坐標系(左)映射到一個典型Android裝置畫面(右)。


上面的圖顯示了統一協調假設左側一個OpenGL框架體系,以及如何將這些坐標實際上映射到一個典型的設備屏幕在右側橫向。為了解決這個問題,你可以申請OpenGL的投影模式和相機意見,使您的圖形對象具有在任何顯示器上以正確的比例轉換坐標。


為了運用投影和相機視圖,您創建一個投影矩陣,攝像機視圖矩陣,並將其應用到OpenGL渲染管線。使他們正確地映射到Android設備屏幕的投影矩陣重新計算圖形的坐標。攝像機視圖矩陣創建從一個特定的眼睛位置渲染對象的變換。


在OpenGL ES 1.0投影和相機視圖


在ES 1.0 API,通過創建每個矩陣,然後將其添加到OpenGL的環境中應用投影和相機視圖。


投影矩陣 - 為了重新計算對象創建使用該設備屏幕的幾何形狀的投影矩陣坐標,以便他們繪制的正確比例。下面的示例代碼演示了如何修改GLSurfaceView.Renderer實施onSurfaceChanged()方法來創建基於屏幕的寬高比的投影矩陣,並將其應用到OpenGL渲染環境。

 

public void onSurfaceChanged(GL10 gl, int width, int height) {
  gl.glViewport(0, 0, width, height);

  // make adjustments for screen ratio
  float ratio = (float) width / height;
  gl.glMatrixMode(GL10.GL_PROJECTION);    // set matrix to projection mode
  gl.glLoadIdentity();            // reset the matrix to its default state
  gl.glFrustumf(-ratio, ratio, -1, 1, 3, 7); // apply the projection matrix
}
相機變換矩陣 - 一旦你使用調整投影矩陣坐標系統,您還必須應用攝影機視圖。下面的示例代碼顯示了如何修改GLSurfaceView.Renderer實施onDrawFrame()方法來應用模型視圖,並使用GLU.gluLookAt()實用程序來創建一個模擬攝像機的位置觀看的轉變。

 

 

public void onDrawFrame(GL10 gl) {
  ...
  // Set GL_MODELVIEW transformation mode
  gl.glMatrixMode(GL10.GL_MODELVIEW);
  gl.glLoadIdentity();           // reset the matrix to its default state

  // When using GL_MODELVIEW, you must set the camera view
  GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
  ...
}
在OpenGL ES 2.0的和更高的投影和相機視圖
在ES2.0和3.0的API,則通過首先添加矩陣部件圖形對象的頂點著色器應用於投影和相機視圖。有了這個矩陣成員加入,你就可以生成和應用投影和鏡頭視角矩陣來你的對象。
添加矩陣頂點著色器 - 創建視圖投影矩陣的變量,並把它作為著色器的位置的乘數。在下面的例子中頂點著色器代碼中,包含的MVP矩陣構件允許你投影和相機的觀看矩陣應用到使用此著色的物體的坐標。

 

 

private final String vertexShaderCode =

  // This matrix member variable provides a hook to manipulate
  // the coordinates of objects that use this vertex shader.
  "uniform mat4 uMVPMatrix;  \n" +

  "attribute vec4 vPosition; \n" +
  "void main(){        \n" +
  // The matrix must be included as part of gl_Position
  // Note that the uMVPMatrix factor *must be first* in order
  // for the matrix multiplication product to be correct.
  " gl_Position = uMVPMatrix * vPosition; \n" +

  "} \n";
注:上面的例子定義了一個變換矩陣成員在其中應用組合投影矩陣和攝像機視圖矩陣頂點著色器。根據您的應用需求,您可能要定義你的頂點著色器單獨的投影矩陣和攝像機觀察矩陣的成員,以便可以獨立改變它們。


訪問著色器矩陣 - 在你的頂點著色器創建一個鉤子應用投影和攝像頭視圖後,你就可以訪問該變量應用投影和攝像頭觀看矩陣。下面的代碼演示了如何修改GLSurfaceView.Renderer實施onSurfaceCreated()方法來訪問在上面的頂點著色器中定義的矩陣變量。

 

 

public void onSurfaceCreated(GL10 unused, EGLConfig config) {
  ...
  muMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");
  ...
}
創建投影和相機的觀看矩陣 - 生成的投影和觀察矩陣要應用的圖形對象。下面的示例代碼顯示了如何修改GLSurfaceView.Renderer實施onSurfaceCreated()和onSurfaceChanged()方法來創建攝像機視圖矩陣,並根據設備的屏幕高寬比的投影矩陣。

 

 

public void onSurfaceCreated(GL10 unused, EGLConfig config) {
  ...
  // Create a camera view matrix
  Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
}

public void onSurfaceChanged(GL10 unused, int width, int height) {
  GLES20.glViewport(0, 0, width, height);

  float ratio = (float) width / height;

  // create a projection matrix from device screen geometry
  Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
}
應用投影和鏡頭視角矩陣 - 要應用投影和相機視圖變換,乘矩陣一起,然後將其設置到頂點著色器。下面的示例代碼顯示了如何修改GLSurfaceView.Renderer實施onDrawFrame()方法,在上面的代碼創建的投影矩陣和攝像機視圖結合起來,然後將其應用於通過的OpenGL渲染圖形對象。

 

 

public void onDrawFrame(GL10 unused) {
  ...
  // Combine the projection and camera view matrices
  Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);

  // Apply the combined projection and camera view transformations
  GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0);

  // Draw objects
  ...
}
有關如何運用投影和相機視圖與OpenGL ES 2.0的一個完整的示例,請參閱使用OpenGL ES的類顯示圖形。


外形面和繞線


在OpenGL,形狀的面是由三個或更多個三維空間中定義的表面。一組三個或更多個三維點(稱為在OpenGL頂點)具有一個前表面和背面。你怎麼知道它的臉前,這是回來了? 好問題。答案與纏繞,或者,您在其中定義形狀的點的方向去做。

 

\

圖1.插圖換算成逆時針順序繪制坐標列表。


在本例中,三角形的點中,使得它們在反時針方向繪制的順序進行定義。在這些坐標被繪制的順序定義了形狀的卷繞方向。默認情況下,在OpenGL,這是逆時針方向繪制面對的是前臉。在圖1所示的三角形被定義,以便你正在尋找的形狀的前表面(由OpenGL作為解釋),而另一側是背面。


為什麼很重要知道哪一個形狀的臉是前面?答案與OpenGL的一個常用的功能,叫做臉撲殺做。面剔除是用於OpenGL的環境,它允許渲染流水線忽略(未計算或繪制)的形狀的背面,節省了時間,存儲器和處理周期一個選項:

 

// enable face culling feature
gl.glEnable(GL10.GL_CULL_FACE);
// specify which faces to not draw
gl.glCullFace(GL10.GL_BACK);
如果您嘗試使用面部特征撲殺不知道,你的形狀,兩側都是正面和背面,你的OpenGL圖形要看看有點薄,或可能顯示不出來的。所以,總是定義一個逆時針繪制順序你的OpenGL圖形的坐標。


注意:您可以設置一個OpenGL環境治療順時針臉的前臉,但這樣做需要更多的代碼,並有可能當你問他們幫忙來迷惑經驗豐富的開發人員的OpenGL。所以,不要做。


OpenGL的版本和設備兼容性


OpenGL ES的1.0和1.1 API規范由於Android 1.0已經支持。采用Android 2.2(API 8級)開始,該框架支持的OpenGL ES 2.0 API規范。 OpenGL ES 2.0的是大多數Android設備的支持,推薦用於新的應用程序正在使用OpenGL開發的。的OpenGL ES 3.0的支持與Android 4.3(API級別18)和更高,在提供OpenGL ES的3.0 API的實現設備。有關支持OpenGL ES的特定版本的Andr??oid供電設備的相對數量的信息,請參閱OpenGL ES版本儀表板。


圖形編程的OpenGL ES 1.0 / 1.1 API比使用2.0及更高版本顯著不同。 API的1.x的版本有更方便的方法和固定圖形管線,而的OpenGL ES 2.0和3.0 API提供了通過利用OpenGL著色器流水線的更直接的控制。您應該謹慎考慮顯卡的要求並選擇最適合您的應用程序API版本。欲了解更多信息,請參閱選擇一個OpenGL API版本。


OpenGL ES的3.0 API提供了額外的功能,比2.0 API的性能更好,也向後兼容。這意味著你可能會寫你的應用程序針對的OpenGL ES 2.0和條件包含的OpenGL ES 3.0圖形功能,如果他們都可用。有關檢查為3.0 API的可用性的詳細信息,請參閱檢查OpenGL ES版本


紋理壓縮支持


紋理壓縮可以通過減少存儲需求的同時更有效地利用內存帶寬增加顯著OpenGL應用程序的性能。 Android框架提供了ETC1壓縮格式作為標准功能,包括ETC1Util實用工具類和etc1tool壓縮工具(位於Android SDK中的 /工具/)的支持。對於使用紋理壓縮??一個Android應用程序的示例,請參閱Android SDK中的CompressedTextureActivity代碼示例( /樣本/ <版本> / ApiDemos / src目錄/ COM /例子/安卓/的API /圖形/)。


注意:ETC1格式是由大多數Android設備的支持,但它不能保證是可用的。要檢查是否支持設備上的ETC1格式,調用ETC1Util.isETC1Supported()方法。


注:ETC1紋理壓縮格式不支持的紋理與透明度(alpha通道)。如果應用程序需要使用透明紋理,您應該調查在目標設備上可用的其他的紋理壓縮格式。


該ETC2 / EAC紋理壓縮格式,保證使用的OpenGL ES 3.0 API時可用。這種紋理格式提供良好的壓縮比與高視覺質量和格式還支持透明度(Alpha通道)。


除了ETC格式,Android設備都根據自己的GPU芯片和OpenGL實現紋理壓縮多樣的支持。您應該調查你的目標來確定應用程序應該支持什麼樣的壓縮類型的設備上的紋理壓縮的支持。為了確定哪些紋理格式都支持特定設備上,必須查詢設備和審查OpenGL擴展名,其中確定哪些紋理壓縮格式(和其他的OpenGL功能)的設備支持。一些常用支持的紋理壓縮格式如下:


ATITC(ATC) - ATI紋理壓縮(ATITC或ATC)可在多種設備,並支持RGB紋理使用和不使用alpha通道固定利率壓縮。這種格式可以通過幾種OpenGL擴展名,例如表示:
GL_AMD_compressed_ATC_texture
GL_ATI_texture_compression_atitc
PVRTC - PowerVR的紋理壓縮(PVRTC)可在各種設備,並支持2位和每像素4位的紋理具有或不具有alpha通道。這種格式是由以下OpenGL擴展名來表示:
GL_IMG_texture_compression_pvrtc
S3TC(DXTn / DXTC) - S3紋理壓縮(S3TC)有幾個格式變化(DXT1到DXT5)和不太廣泛使用。該格式支持RGB紋理與4位字母或8位Alpha通道。這種格式可以通過幾種OpenGL擴展名,例如表示:
GL_OES_texture_compression_S3TC
GL_EXT_texture_compression_s3tc
GL_EXT_texture_compression_dxt1
GL_EXT_texture_compression_dxt3
GL_EXT_texture_compression_dxt5
3DC - 3DC紋理壓縮(3DC)是支持RGB紋理與alpha通道較少廣泛使用的格式。這種格式是由以下OpenGL擴展名來表示:
GL_AMD_compressed_3DC_texture
警告:這些紋理壓縮格式不支持的所有設備。對這些格式的支持可以通過制造商和設備而異。有關如何確定的格式是一個特定的設備上什麼紋理壓縮的信息,請參閱下一節。
注意:一旦你決定哪些紋理壓縮格式的應用程序將支持,確保您在使用清單<支持-GL紋理>申報。使用此聲明允許通過外部服務,如谷歌播放過濾,從而僅安裝在支持您的應用要求的格式設備上的應用程序。有關詳細信息,請參閱OpenGL的艙單申報。
確定OpenGL擴展
的OpenGL的實現通過Android設備在擴展OpenGL ES的API所支持的方面有所不同。這些擴展包括紋理壓縮,但通常還包括其他擴展到OpenGL的功能集。
要確定哪些紋理壓縮格式,和其他OpenGL擴展,支持在特定設備上:
運行在目標設備上下面的代碼,以確定支持哪些紋理??壓縮格式:
String extensions = javax.microedition.khronos.opengles.GL10.glGetString(
    GL10.GL_EXTENSIONS);
  1.  

    警告:此調用的結果與設備的實際!您必須運行在多個目標設備此調用,以確定哪些類型的壓縮通常支持。
    閱讀本方法的輸出,以確定哪些OpenGL擴展支持在設備上。
    Android的擴展包(AEP)
    該AEP確保您的應用程序支持一套標准化OpenGL擴展超出了OpenGL的3.1規范中描述的一套核心。包裝這些擴展一起鼓勵一套一致的跨設備的功能,同時允許開發人員能夠充分利用移動GPU設備的最新作物。
    該AEP還改善了圖像,渲染存儲緩沖器,並在片段著色原子專櫃的支持。
    對於您的應用程序能夠使用的AEP,該應用程序的清單必須聲明的AEP是必需的。此外,平台版本必須支持它。
    申報清單中的AEP要求如下:
    要驗證平台版本支持AEP,使用hasSystemFeature(String)方法,在FEATURE_OPENGLES_EXTENSION_PACK傳遞作為參數。下面的代碼片段顯示了如何做到這一點的例子:
    boolean deviceSupportsAEP = getPackageManager().hasSystemFeature
      (PackageManager.FEATURE_OPENGLES_EXTENSION_PACK);
    如果該方法返回true,AEP支持。
    有關AEP的更多信息,請在Khronos的OpenGL ES的注冊表訪問其網頁。
    檢查OpenGL ES版本
    有在Android設備上提供多個版本的OpenGL ES的。你可以指定你的應用程序需要在你的清單API的最低版本,但你也可能想利用功能的新的API在同一時間。例如,對OpenGL ES 3.0 API與2.0版本的API向後兼容,所以你可能需要編寫你的應用程序,以便它使用的OpenGL ES 3.0的功能,但如果3.0 API不回落到2.0 API可用。
    利用比你的應用程序清單所需的最低更高版本的OpenGL ES功能之前,你的應用程序應檢查設備上可用的API的版本。您可以通過以下兩種方式之一進行:
    嘗試建立更高級別的OpenGL ES上下文(GL上下文),並檢查結果。
    創建最小支持OpenGL ES的背景和檢查版本價值。
    下面的示例代碼演示了如何通過創建一個EGLContext和檢查結果,檢查可用的OpenGL ES版本。這個例子說明如何檢查的OpenGL ES 3.0的版本:
    private static double glVersion = 3.0;
    
    private static class ContextFactory implements GLSurfaceView.EGLContextFactory {
    
     private static int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
    
     public EGLContext createContext(
         EGL10 egl, EGLDisplay display, EGLConfig eglConfig) {
    
       Log.w(TAG, "creating OpenGL ES " + glVersion + " context");
       int[] attrib_list = {EGL_CONTEXT_CLIENT_VERSION, (int) glVersion,
           EGL10.EGL_NONE };
       // attempt to create a OpenGL ES 3.0 context
       EGLContext context = egl.eglCreateContext(
           display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list);
       return context; // returns null if 3.0 is not supported;
     }
    }
    如果上述的createContext()方法,顯示返回null,你的代碼應該創建一個OpenGL ES 2.0的范圍內,而不是和回落到只使用該API。
    下面的代碼示例演示如何首先創建一個支持的最低上下文,然後檢查版本字符串檢查OpenGL ES版本:
    // Create a minimum supported OpenGL ES context, then check:
    String version = javax.microedition.khronos.opengles.GL10.glGetString(
        GL10.GL_VERSION);
    Log.w(TAG, "Version: " + version );
    // The version format is displayed as: "OpenGL ES ."
    // followed by optional content provided by the implementation.
    通過這種方法,如果您發現該設備支持更高級別的API版本,您必須銷毀最小的OpenGL ES的背景下,並創建一個新的上下文具有較高可用的API版本。
    選擇一個OpenGL API版本
    的OpenGL ES 1.0 API的版本(和1.1擴展),2.0版和3.0版的所有用於創建3D游戲,可視化和用戶界面,提供了高性能的圖形界面。圖形編程的OpenGL ES 2.0和3.0在很大程度上是相似的,與代表附加功能的2.0 API的超集3.0版本。為OpenGL ES的1.0 / 1.1 API與OpenGL ES的編程2.0和3.0不同顯著,因此開發商應該仔細考慮開始使用這些API開發之前以下因素:
    性能 - 一般情況下,的OpenGL ES 2.0和3.0提供比ES 1.0 / 1.1版本更快的圖形性能。不過,性能差異可以根據您的OpenGL應用程序上,運行在Android設備上由於硬件制造商的實現的OpenGL ES圖形管線的不同而有所差異。
    設備的兼容性 - 開發者應該考慮的設備類型,版本的Andr??oid和可用到他們的客戶的OpenGL ES版本。對於OpenGL的兼容性跨設備的詳細信息,請參閱OpenGL的版本和設備兼容性部分。
    編碼方便?? - OpenGL ES的1.0 / 1.1 API提供了一個固定的功能管線和方便的功能,這是不是在OpenGL ES的2.0或3.0的API可用。開發誰是新的OpenGL ES可能會發現編碼版本1.0 / 1.1更快,更方便。
    圖形控制 - 的OpenGL ES 2.0和3.0的API,通過使用著色器提供完全可編程管線提供更高程度的控制。與圖形處理管線的更直接的控制,開發者可以創建效果,將是非常困難的使用1.0 / 1.1 API生成。
    紋理支持 - 的OpenGL ES 3.0 API擁有紋理壓縮了最好的支持,因為它保證了ETC2壓縮格式,支持透明的可用性。在1.x和2.0 API的實現通常包括支持ETC1,但是這紋理格式不支持透明度,所以你通常必須提供資源,通過你的目標設備支持的其他壓縮格式。有關詳細信息,請參閱紋理壓縮支持。
    雖然性能,兼容性,便利性,控制等因素都可能影響你的決定,你應該根據你的想法為你的用戶提供最佳體驗挑一個OpenGL API版本。
     
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved