Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓ICS:系统的功能是什么;“强制GPU渲染”;你到底怎么办?_Android_Opengl Es - Fatal编程技术网

Android 安卓ICS:系统的功能是什么;“强制GPU渲染”;你到底怎么办?

Android 安卓ICS:系统的功能是什么;“强制GPU渲染”;你到底怎么办?,android,opengl-es,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 ... 第一个场景渲染得非常好,但是在第一

我发现,当我启用此开发人员选项时,我的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渲染”选项,这一切都可以很好地工作(即实现)


那么,这个选项实际上是做什么的呢?

它在所有应用程序中强制硬件加速。您可以在此处阅读更多信息:


确保检查不支持的操作,这可能是您遇到问题的地方。

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

正如这里所说的,该选项强制图形硬件加速,这应该是API级别14或15的默认值,我是指ICS

我不建议在模拟器上测试它,因为它会使您的计算机和Eclipse变得迟钝和/或崩溃。我在具有广泛资源配置(不同大小的显示器、缓存、CPU和RAM)的模拟器上尝试过此设置,API级别为14和15,它总是崩溃

<> P>最好在双核心设备上测试你的应用程序,比如最近的三星Galaxy 10.1,8.9平板电脑或者摩托罗拉XOOM平板电脑,它有像英伟达TEGRA GPU这样的实际硬件来支持蜂巢加速,使OpenGL ES应用程序更好。而且,由于市场上没有配备ICS的平板电脑,因此您将无法匹配API级别14和ICS的上述配置


最后,我同意谷歌在SDK上还没有解决的一个bug。

这个选项是为开发者设计的,这样他们就可以在打开H/W加速的情况下轻松测试自己的应用程序。据我所知,使用Canvas API的2D应用程序可以受益于此选项,因为打开此选项确实会迫使系统在不同线程上创建本机GLES2.0上下文,并让Canvas类使用GLES h/w加速后端而不是Skia后端。本机GLES2.0上下文创建是在C本机代码中进行的,应用程序开发人员对此没有控制权

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


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

谢谢你的链接,但我的UI完全是OpenGL ES。。。它已经加速了。我不使用任何画布API,也不理解为什么此设置会影响基于GL的应用程序。看起来这个设置会导致加载另一个GL驱动程序。有趣的是,如果它加载另一个驱动程序来为canvas API进行硬件加速,我不会感到惊讶。(我几乎100%确定这是您强制执行的)为了测试我的理论,您可以在应用程序清单中启用hw acc,sdk目标至少为3.0。关于这一点的说明在org答案中的链接中。这确实是一篇来自hackbod的好文章,但不幸的是对我帮助不大。我越来越认为这是ICS中的一个缺陷。最新的观察结果是,在第一帧绘制成功后,我的EGLImpl.mEGLContext发生了变化。很确定这不应该发生。试着在android平台的谷歌群组中问这个特定的问题。我在这里也找到了这个错误的一个很好的解释:我可能会这样做,但仍在调查中。看起来操作系统正在迫使应用程序切换到2.0渲染器,这就是为什么glMatrixMode等API突然不受支持的原因。尽管清单声明只使用了1.1,但仍然存在这种情况。如果这个观察是正确的,有点史诗般的ICS会失败……我有一个类似的问题,我有一个完全的opengl活动,如果我将targetSdkVersion设置为15,则ICS不起作用,如果我将它设置为targetSdkVersion,这对我来说足够接近了,并且符合观察结果和我在其他地方学到的东西。我收到一条来自安卓图形人Romain Guy的推特。。。他说,OpenGL应用程序只有在主UI线程上创建EGL上下文时才会出现这个问题。更常见的是,所有GL调用都在专用线程上运行,这种做法我不喜欢,因为太无聊了,无法深入研究。@ReubenScratton我在这里遇到了完全相同的问题,我还在主线程上创建EGL上下文。你有没有找到解决这个问题的方法,或者你最终使用了一个单独的GL线程?我最终创建了一个专用的渲染线程,并将所有GL代码都移动到其中。这对于我和你的需求来说都是小题大做,但这个特定的操作系统功能假设所有的GL应用程序都是在主线程之外渲染的,我们必须这样做。