我在Ubuntu主机上运行Android Virtual Device。
它正在使用CPU/ABI Intel Atom(x86),而我正在使用主机GPU。
仿真器正在使用Kernel-based Virtual Machine。
只要我使用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应用程序?
最佳答案
Android Studio 3.0及更高版本支持在模拟器中运行GLES3应用程序。
在撰写本文时,此版本的预览版本可用。
另请:https://android-developers.googleblog.com/2017/05/android-studio-3-0-canary1.html
启动仿真器后,您需要更改设置,然后如下图所示重新启动仿真器。
另外,请确保您的应用请求ES3上下文,因为Android示例代码gles3jni不会这样做。
更新于2018年6月
在最新的Android Studio中,即使它是同一台PC,也无法选择OpenGL ES3.1。
为了使其正常工作,我必须在〜/.android/目录中添加一个文件。
cd ~/.android/
$ echo "GLESDynamicVersion = on" >> ~/.android/advancedFeatures.ini