【问题标题】:HTC Only Hard Crash inside OpenGLHTC 仅在 OpenGL 内发生硬崩溃
【发布时间】:2011-07-11 11:29:22
【问题描述】:

我在我的应用程序中看到这个问题已经有一段时间了。它通过在使用 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。使用这个解决方案我没有得到很好的结果(它仍然崩溃但不太频繁)。有没有其他人听说过这个问题?遇到过更好的解决方案吗?

【问题讨论】:

  • 这不会有什么安慰,但我能感觉到你的痛苦。我在市场上有 2 个 cmets“手机已锁定,必须取出电池。HTC Desire”。不知道是什么原因造成的,我看到游戏在朋友的 Desire 上运行良好。
  • 是的,我在许多 HTC 手机上都遇到过这种情况,但主要是在压力测试期间(让应用程序在一夜之间运行)。到目前为止还没有解决方案,我每隔几周就会进行一次网络搜索以寻找更新。

标签: android opengl-es htc-android


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多