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()解決策の 1 つは、メソッドの最後に呼び出すことでしたonDraw()が、フレームレートが半分になりました。驚くべきことに、そのデバイスでのみでしたが、私はそれが悪い解決策であると考え、探し続けました。

2 番目の修正と現在使用しているパフォーマンスの低下がほとんどない修正は、頂点配列の更新に使用するのをやめてglBufferSubData、配列全体を でアップロードし続けることglBufferDataでした。VBO と glBufferSubData を使用して更新している場合は、変更してみてください。

于 2011-10-14T01:45:29.847 に答える