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

时间:2011-12-20 21:42:52

标签: 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
 ...

第一个场景呈现得非常好,但在第一个场景swapbuffers()之后,所有可疑的GL ES API(甚至glSetMatrixMode())都不做任何事情,只记录“未实现的API”。

如果我将“强制GPU渲染”选项设置为关闭,这一切都能很好地工作(即已实现)。

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

4 个答案:

答案 0 :(得分:3)

该选项适用于开发人员,因此他们可以在启用H / W加速功能的情况下轻松测试其应用。据我所知,使用Canvas Apis的2D应用程序可以从这个选项中受益,因为打开它会确实迫使系统在不同的线程上创建原生的GLES2.0 Context并让Canvas类使用GLES h / w加速后端而不是Skia。这个原生的GLES2.0上下文创建发生在C Native代码中,而app开发人员无法控制它。

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

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

答案 1 :(得分:2)

它强制所有应用程序中的硬件加速。您可以在此处详细了解:http://developer.android.com/guide/topics/graphics/hardware-accel.html

请务必查看不受支持的操作,这可能是您遇到问题的原因。

答案 2 :(得分:0)

ICS中的加速模式并不比Honeycomd更特殊。默认情况下,为所有针对api 14或更高版本的应用程序启用加速模式。但与此同时,有些应用程序针对其他版本的SDK。因此,您可以通过设置“强制GPU渲染”在这些应用程序中启用硬件加速。来自Dianne的一个很棒的explanation和一个post解释了这一点。

答案 3 :(得分:0)

如前所述,该选项强制图形硬件加速,它应该是API级别14或15的默认值,我的意思是ICS。

我不建议在模拟器上测试它,因为它会使你的计算机和Eclipse变得迟钝和/或崩溃。我已尝试在具有各种资源配置(不同大小的显示,缓存,CPU和RAM)的仿真器上使用API​​级别14和15以及它总是崩溃

最好在双核设备上测试你的应用程序,例如最新的三星Galaxy 10.1,8.9平板电脑或摩托罗拉Xoom平板电脑,它们拥有像nVidia Tegra GPU这样的实际硬件来支持Honeycomb以来的加速,使其更适合OpenGL ES应用程序......由于市场上没有带ICS的平板电脑,您将无法匹配API级别14和ICS的上述配置。

我会同意谷歌尚未在SDK上解决/解决的错误。