9

我在我的应用程序中看到这个问题已经有一段时间了。它通过在使用 OpenGL 进行渲染时随机硬锁定或重新启动 HTC 手机来显示自己。检查 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 。使用这个解决方案我没有得到很好的结果(它仍然崩溃但不太频繁)。有没有其他人听说过这个问题?遇到过更好的解决方案吗?

4

1 回答 1

1

我们在使用 HTC Sensation 设备和 Android 2.3.4 的游戏中遇到了这个问题——所以我们去买了这个设备并进行了一些试验。egl.eglWaitGL()解决方案之一是在方法结束时调用,onDraw()但这将帧速率减半 - 令人惊讶的是仅在该设备上,但我认为这是一个糟糕的解决方案并继续寻找。

第二个修复方法也是我们目前使用的几乎没有性能损失的修复方法是停止使用glBufferSubData更新顶点数组并继续使用glBufferData. 如果您使用 VBO 和 glBufferSubData 来更新它们,请尝试更改它。

于 2011-10-14T01:45:29.847 回答