Android ICS:系统"强制GPU渲染"选项实际上做了什么?

Reu*_*ton 6 android opengl-es

我发现当我启用此开发人员选项时,我的OpenGL项目停止工作.至少可以说有点惊慌.

Logcat显示了这些:

 E/libEGL  ( 1022): called unimplemented OpenGL ES API
 E/libEGL  ( 1022): called unimplemented OpenGL ES API
 E/libEGL  ( 1022): called unimplemented OpenGL ES API
 ...
Run Code Online (Sandbox Code Playgroud)

第一个场景呈现得非常好,但在此之后swapbuffers(),所有可疑的GL ES API(偶数glSetMatrixMode())除了记录"未实现的API"之外什么都不做.

如果我关闭了"Force GPU rendering"选项,这一切都能很好地工作(即已实现).

那么,这个选项实际上做了什么?

小智 3

该选项适用于开发人员,以便他们可以在打开硬件加速的情况下轻松测试他们的应用程序。据我了解,使用 Canvas API 的 2D 应用程序可以从此选项中受益,因为打开此选项确实会强制系统在不同线程上创建本机 GLES2.0 上下文,并使 Canvas 类使用 GLES h/w 加速后端而不是 Skia 后端。此本机 GLES2.0 上下文创建发生在 C 本机代码中,应用程序开发人员对此无法控制。

回到您的问题,“称为未实现的错误消息”基本上是说(1)您确实使用了错误的 GL 上下文(例如,使用 GLES2.0 上下文进行 GLES1.1 调用,反之亦然)或( 2) 您的设备无法加载 GLES 驱动程序,因此系统无法找到实际的 GL 函数指针。系统通过读取 /system/lib/egl/ 下的 egl.cfg 文件知道要加载什么,并且 GL 驱动程序本身位于 /system/vendor/lib/ 下。

我会跟进谷歌,因为这可能只是一个错误。