在我的应用程序中,我一直看到这个问题。它通过随机硬锁或重启HTC手机在使用OpenGL进行渲染时显示出来。检查logcat它似乎是一个死锁问题,因为你会看到这个打印...
waitForCondition(LockCondition) timed out (identity=9, status=0). CPU may be pegged. trying again.
到目前为止,我能找到的最佳信息来源是: http://groups.google.com/group/android-developers/browse_thread/thread/d5b7e87f4b42fa8f/d6214ed7a02efc98?q=freeze&lnk=ol&
他们建议在glSurface的OnDraw函数末尾添加glFinish。我使用这个解决方案并没有很好的结果(它仍然崩溃,但不常见)。还有其他人听说过这个问题吗?遇到任何更好的解决方案?
答案 0 :(得分:1)
我们在使用HTC Sensation设备和Android 2.3.4的游戏中遇到了这个问题 - 所以我们去购买设备并尝试了一下。其中一个解决方案是在egl.eglWaitGL()
方法结束时调用onDraw()
,但是将帧速率减半 - 令人惊讶的只是在该设备上,但我认为它是一个糟糕的解决方案并且一直在寻找。
第二个修复程序和我们当前使用的几乎没有性能损失的修复程序是停止使用glBufferSubData
更新我们的顶点数组并继续使用glBufferData
上传整个数组。如果您使用VBO和glBufferSubData来更新它们,请尝试更改它。