Android 模拟器和 OpenGL ES3:EGL_BAD_CONFIG

2024-02-07

我正在运行一个Android 虚拟设备 https://developer.android.com/studio/run/managing-avds.html在我的 Ubuntu 主机上。 它使用 CPU/ABI Intel Atom (x86),我使用主机 GPU。 模拟器正在使用基于内核的虚拟机 https://en.wikipedia.org/wiki/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 error:

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 https://android-developers.googleblog.com/2017/05/android-studio-3-0-canary1.html

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

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

2018 年 6 月更新

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

为了使其工作,我必须将一个文件添加到 ~/.android/ 目录。

cd ~/.android/
$ echo "GLESDynamicVersion = on" >> ~/.android/advancedFeatures.ini
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 模拟器和 OpenGL ES3:EGL_BAD_CONFIG 的相关文章

随机推荐

  • mutableStateOf 在重组后保留值,无需记住 Jetpack Compose 中的 API

    任何时候更新状态都会发生重组 但在这里 我没有使用记住API 但在重组之后它也保留了该值 是mutableStateOf 会记住没有值remember API Composable fun MyChildUI var count by mu
  • 两个具有相同变量名的 foreach 循环破坏了元素的顺序

    这是我的代码 foreach datawallright adds as ad ad img get ad pic url this gt em gt getReference models MmAds ad id crop ad desc
  • Facebook SDK 未加载...all.js GET 失败

    我正在使用中提供的相同代码here http developers facebook com docs reference javascript div div
  • 如何在sql中使用like和join?

    我有 2 个表 例如表 A 和表 B 我想执行联接 但匹配条件必须是 A 中的列 类似于 B 中的列 这意味着任何内容都可以出现在该列之前或之后乙 例如 如果 A 中的列是 foo 然后 如果 B 中的列是 fooblah somethin
  • asyncio 是否支持从非主线程运行子进程?

    我正在开发一个应用程序 主要由服务组成 这些服务是具有自定义运行循环的线程 其中一项服务需要生成子进程 我不太明白它是否有效 官方的文档 https docs python org 3 library asyncio subprocess
  • JS 翻译?

    基本上需要在JS中生成自定义 一些不同然后是不是 消息 警报 如何处理其中的翻译 请看一下jQuery i18n http recurser com articles 2008 02 21 jquery i18n translation p
  • Android Studio 未加载[重复]

    这个问题在这里已经有答案了 在 Google 发布基于 IntelliJ 的 Android Studio 后 我想尝试一下 但遇到了问题 它安装得很好 并且在安装过程中成功找到了 JDK 但是当我尝试启动它时没有任何反应 没有错误 没有闪
  • 并行联合...SQL Server 会这样做吗?

    如果我想合并位于不同驱动器上的多个表的数据 SQL 会并行提取数据吗 有什么我应该了解的相关设置或提示吗 至少从 SQL Server 2005 开始 UNION 应该并行运行 如果表位于不同驱动器或同一驱动器上 则没有什么区别 在现代世界
  • 如何将 INT64 写入 CString

    我正在 c windows 中编码 INT64 dirID 1 CString querySQLStr T querySQLStr Format L select from ImageInfo where FolderPath 64d di
  • ORACLE:使用 LEFT JOIN 时物化视图不起作用

    我想从 2 个表的 LEFT JOIN 创建一个物化视图 但是以下给了我一个错误 SELECT field1 FROM table 1 a LEFT JOIN table 2 b ON a field1 b field2 ORA 12054
  • import.io JSON 数据

    我需要从 import io 生成的 JSON 中输出一些值 这是 JSON object stdClass 1 7 offset gt int 0 results gt array 5 0 gt object stdClass 2 3 v
  • 跟踪实例化对象数量的 Java 类变量

    我有这个班级 Student 带有变量 StudentID public class Student extends Person int studentID 0 int level public Student public Studen
  • 用户会话 ID 作为 Ajax 调用中的参数

    我创建了一个HttpHandler我将使用jquery Ajax call This HttpHandler将访问数据库并检查与当前登录的用户 用户被认为是通过使用 Session 登录的 其属性称为user id Session user
  • 为什么我的密钥标识符不匹配?

    我正在尝试解密 S MIME 电子邮件 最初通过 Outlook 发送 为此 我使用 bouncycastle API 不过 我遇到了障碍 我在 Windows 证书存储中拥有收件人的证书 我之前曾用它向对方发送经过签名和加密的电子邮件 而
  • Java 到 Google 电子表格

    我试图使用 Java 进行编程以连接到 Google Spreadsheet 以进行数据检索或修改单元格中的数据 我的 Google 电子表格链接是https docs google com spreadsheets d 1UXoGD2go
  • Python argparse - 强制参数 - 位置或可选

    我希望用户能够使用位置参数或可选参数将强制参数传递给 argparse IE 以下两种形式均有效 my prog arg my prog m arg 我见过Argparse 可选位置参数 https stackoverflow com qu
  • 为什么这段代码会打印两次? [复制]

    这个问题在这里已经有答案了 可能的重复 Linux gcc 中 fork 的工作 https stackoverflow com questions 3513242 working of fork in linux gcc include
  • 使用 Dagger 2 + Kotlin + ViewModel 注入 ViewModel

    class SlideshowViewModel ViewModel Inject lateinit var mediaItemRepository MediaItemRepository fun init What goes here 因
  • 如果数组在 List 或 Map 内进行注释,Java 8 TYPE_USE 注释将不起作用

    我正在尝试编写一个带有注释的简单验证库 该注释使用 Java 8 中的新 TYPE USE 目标 访问这些东西的方式非常复杂 给我留下了两个非常混乱的代码 它们执行完全相同的操作 但也与他们实际要做的事情非常相关 因此 我决定创建一组简单的
  • Android 模拟器和 OpenGL ES3:EGL_BAD_CONFIG

    我正在运行一个Android 虚拟设备 https developer android com studio run managing avds html在我的 Ubuntu 主机上 它使用 CPU ABI Intel Atom x86 我