2012-12-05 170 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