Android Emulator和OpenGL ES3:EGL_BAD_CONFIG

时间:2016-11-25 04:56:22

标签: android android-emulator avd kvm opengl-es-3.0

我在我的Ubuntu主机上运行Android Virtual Device。 它使用CPU / ABI Intel Atom(x86),我正在使用主机GPU。 模拟器使用Kernel-based Virtual Machine

settings used

只要我使用OpenGL ES2上下文,这就非常有效。 但是,如果我的应用尝试创建OpenGL ES3上下文,请使用...

const EGLint contextAttribs[] = {
    EGL_CONTEXT_CLIENT_VERSION, 3,
    EGL_NONE
};
context = eglCreateContext(display, config, NULL, contextAttribs);

...然后我收到 EGL_BAD_CONFIG 错误:

I/biplane ( 2839): EGL: vendor Android version 1.4 Android META-EGL
I/biplane ( 2839): EGL: client apis OpenGL_ES
I/biplane ( 2839): number of EGL configurations that match our preferred criteria: 1
I/biplane ( 2839): R8 G8 B8 A8 DEPTH24
E/EGL_emulation( 2839): tid 2852: eglCreateContext(919): error 0x3005 (EGL_BAD_CONFIG)

在硬件移动设备上请求ES3,效果很好。 但是当从模拟器请求它时,它会失败。 从glxinfo可以看出主机完全能够执行OpenGL ES3.0,ES3.1和ES3.2:

$ glxinfo | grep ES3
    GL_ARB_ES2_compatibility, GL_ARB_ES3_1_compatibility, 
    GL_ARB_ES3_2_compatibility, GL_ARB_ES3_compatibility, 
    GL_NV_ES3_1_compatibility, GL_NV_bindless_multi_draw_indirect, 
    GL_ARB_ES2_compatibility, GL_ARB_ES3_1_compatibility, 
    GL_ARB_ES3_2_compatibility, GL_ARB_ES3_compatibility, 
    GL_NV_ES3_1_compatibility, GL_NV_bindless_multi_draw_indirect, 

有没有办法在kvm之上的Android虚拟设备上运行OpenGL ES3应用程序?

2 个答案:

答案 0 :(得分:3)

Android Studio 3.0及更高版本支持在模拟器中运行GLES3应用程序。

在撰写本文时,可以使用此版本的预览版本。 请参阅:https://android-developers.googleblog.com/2017/05/android-studio-3-0-canary1.html

启动模拟器后,您需要更改设置,然后重新启动模拟器,如下所示。

此外,请确保您的应用请求ES3上下文,因为Android示例代码gles3jni不会这样做。

enter image description here

2018年2月更新

在最新的Android Studio中,我无法再选择OpenGL ES3.1,即使它是同一台PC。

enter image description here

为了使它工作,我不得不在〜/ .android /目录中添加一个文件。

cd ~/.android/
$ echo "GLESDynamicVersion = on" >> ~/.android/advancedFeatures.ini

答案 1 :(得分:1)

注意: enter image description here

应在模拟器>设置>高级中打开OpenGL SE

不在ADB页面中。