【问题标题】:OpenGL ES 2.0 Support for Android?OpenGL ES 2.0 对 Android 的支持?
【发布时间】:2012-12-05 06:22:12
【问题描述】:

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 仿真”并将布尔值设置为“是”。但是,这是我看到的:

奇怪的是,我的 AVD 管理器中有另一个模拟器,其中有“硬件”表:

为了准确地向您展示我在做什么,这里有一些代码可以做一些我想在 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)

【问题讨论】:

    标签: android-emulator opengl-es-2.0


    【解决方案1】:

    我可以回答你的问题。 Android 模拟器支持 OpenGL ES 2.0。 我用 cocos2d-x v.2(它使用 OpenGL ES 2.0)创建了一个应用程序。 我有同样的 FATAL EXCEPTION: GLThread 81 error with same stack。 我通过添加解决了这个问题

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

    设置渲染器之前 setRenderer:

    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

    【讨论】:

    • 请注意,硬件 GPU 加速仅适用于 Android 4.0 及更高版本的 AVD。带有 Android 2.2 的 AVD 不会加速 OpenGL ES 2.0
    • 我今天将尝试在 Android 设备上测试此代码。我想确保这段代码可以在真实设备上运行。
    • 我在 Fly 设备上测试了这段代码,它可以工作。 cocos2d-x 论坛的人提到,这段代码只能在模拟器上运行,不能在设备上运行。见cocos2d-x.org/boards/6/topics/12563?r=19457#message-19457
    【解决方案2】:

    我刚刚解决了这个问题,没有在我的源代码中添加任何新行。在 avd-manager 中,我为我的模拟器设备设置了“使用主机 GPU”。现在可以在我的 Geforce GTX 570 上完美运行。

    模拟器设备上的API Level是16,Manifest中的min-SDK是15。

    【讨论】:

      【解决方案3】:

      遇到同样的问题。原始越野车代码:

      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);
      }
      


      解决者:

      a.) 替换此代码行

      view.setEGLConfigChooser(true);
      

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


      b.) 通过 Eclipse 设置 -gpu on --> Run as ---> Target ---> Additional Emulator Command Line Options

      在上面的讨论中再​​补充一点:
      在使用上述代码时,我遇到了两条不同的异常消息

      致命异常:GLThread 75 java.lang.IllegalArgumentException:没有配置匹配 configSpec

      java.lang.IllegalArgumentException: 未选择配置

      http://on-android-opengl2.blogspot.in/2013/05/android-opengl-es-20-emulator.html 讲述的更详细的案例研究

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-02
        • 1970-01-01
        相关资源
        最近更新 更多