2012-12-05 227 views
15

我見過多個關於這個話題,並開始混淆我。我真的希望有人能給我一個明確的答案! :)OpenGL ES 2.0支持Android?

我猜是生硬:Android模擬器是否支持OpenGL ES 2.0?我看到一些人說「是的,但你必須改變一些設置。」而且我也看到了「不,它不支持它,期間。」以下是我所做的嘗試和糾正問題,包括我得到的一些錯誤消息。

首先,我修改了AndroidManifest.xml中包含下面的代碼:

<uses-feature 
    android:glEsVersion="0x00020000" /> 

<uses-sdk 
    android:minSdkVersion="15" 
    android:targetSdkVersion="17" /> 

然後,當我想我的實例GLSurfaceView,我使用此代碼序列進行實例化:

super(context); 

setEGLContextClientVersion(2); 

setRenderer(new MyRenderer()); 
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 

然後,我看到的每個地方都說你必須進入AVD管理器,選擇仿真器,進入「硬件」,添加「GPU仿真」並將布爾值設置爲「是」。然而,這裏是我所看到的,當我看到我的:

Screenshoot of my Android 4.2 emulator window.

什麼奇特的是,我在我的AVD管理另一個模擬器,其中我有「硬件」表:

What does my Android 2.2 emulator have the hardware table?

而只是爲了告訴你我在做什麼,這裏的一些代碼,做一些東西,我想在OpenGL ES 2.0的做(我主要是從Android的自身教程得到這個):

int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode); 
int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode); 

program = GLES20.glCreateProgram(); 
GLES20.glAttachShader(program, vertexShader); 
GLES20.glAttachShader(program, fragmentShader); 
GLES20.glLinkProgram(program); 

我不想把我的代碼改回到OpenGL ES 1.0中,因爲那需要很多麻煩,如果我能避免它,我會的。

最後,當我嘗試運行我的程序時,程序關閉窗口:「不幸的是,已停止。」這是logcat的告訴我說:

12-05 06:16:27.165: E/AndroidRuntime(936): FATAL EXCEPTION: GLThread 81 
12-05 06:16:27.165: E/AndroidRuntime(936): java.lang.IllegalArgumentException: No config chosen 
12-05 06:16:27.165: E/AndroidRuntime(936): at android.opengl.GLSurfaceView$BaseConfigChooser.chooseConfig(GLSurfaceView.java:874) 
12-05 06:16:27.165: E/AndroidRuntime(936): at android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:1024) 
12-05 06:16:27.165: E/AndroidRuntime(936): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1401) 
12-05 06:16:27.165: E/AndroidRuntime(936): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240) 

,我會說我並不在此的專家,這是我的OpenGL的第一次經歷。如果任何人有任何想法來解決這個問題,我會永遠感激。 :) 謝謝!

回答

16

我可以對你的問題說是。 Android模擬器支持OpenGL ES 2.0。 我用cocos2d-x v.2創建了一個應用程序(使用OpenGL ES 2.0)。 我有相同的致命例外:同一堆棧的GLThread 81錯誤。 我通過設置渲染setRenderer前加入

gLSurfaceView.setEGLConfigChooser(8 , 8, 8, 8, 16, 0); 

解決了這個問題:

gLSurfaceView.setCocos2dxRenderer(new Cocos2dxRenderer()); 

現在我可以在Android模擬器上運行我的應用程序。

看到我的問題和答案在https://stackoverflow.com/a/13719983/307547。 我這個鏈接帖子包含的截圖與AVD設置:

http://www.cocos2d-x.org/boards/6/topics/12563?r=19274#message-19274

+2

請注意,硬件GPU加速僅適用於自動真空澱積系統與Android 4.0及以上。 AVD與Android 2.2不會加速OpenGL ES 2.0 – keaukraine

+1

我會嘗試今天在Android設備上測試此代碼。我想確保這些代碼可以在真實設備上運行。 – Petr

+0

我在Fly設備上測試過這段代碼,它工作正常。 cocos2d-x論壇的人員提到,這個代碼只能在模擬器上運行,而不能在設備上運行。見http://www.cocos2d-x.org/boards/6/topics/12563?r=19457#message-19457 – Petr

4

得到了同樣的問題。原始缺陷代碼:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.d(this.getClass().getName(), "Into onCreate Draw triangle"); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 

    if (detectOpenGLES20()){ 
     Log.d("GLES20", "GL ES 2.0 Supported..............!"); 
    } else { 
     Log.d("GLES20", "GL ES 2.0 Not Supported...............!"); 
    } 

    view = new GLSurfaceView(this); 
    view.setEGLContextClientVersion(2); 
    view.setEGLConfigChooser(true); 
    view.setRenderer(new TriangleRenderer(view)); 
    setContentView(view); 
} 


要解決:

一)更換這行代碼

view.setEGLConfigChooser(true); 

view.setEGLConfigChooser(8, 8, 8, 8, 16, 0); 


二)通過Eclipse設置-gpu on - >運行方式--->目標--->其他仿真器的命令行選項

添加多一點上面的討論:
有兩個不同異常消息我碰到上述一段代碼

致命異常工作時:GLThread 75 java.lang.IllegalArgumentException異常:無CONFIGS匹配configSpec

java.lang.IllegalArgumentException異常:沒有配置選擇

http://on-android-opengl2.blogspot.in/2013/05/android-opengl-es-20-emulator.html

5

講述更爲詳細的案例分析我只是解決了這一問題,不添加任何新行我源代碼。在avd-manager中,我爲我的仿真器設置了「Use Host GPU」。現在工作完全正常在我的Geforce GTX模擬器設備570

API等級爲16,最小的SDK在貨單15