6

これはFire固有のGPUの問題のようです。助けや提案をいただければ幸いです。

ほとんどの場合、私のタワーディフェンスゲームは、数十の敵とタワーがすべての方向に射撃している場合でも、60fpsを実行できます。ただし、一見ランダムな時間(メインメニューに座っているなど、何も起こらない場合でも)では、400msのヒッチが非常に等間隔に配置され、約2〜3秒の間隔でゲームが一時停止します。その後、突然ヒッチが消え、16x16ピクセルのテクスチャブロックがランダムにレンダリングされなくなります。

これらの2つのグリッチは相互に排他的であるように見えます。前述のように、ゲームを開始し、メインメニューからレベル選択画面に移動するだけでトリガーできます。この画面では、最小限のリソースが読み込まれ、ゲームロジックはほとんど発生しません。私は効果音にOpenSLを使用していますが、sfxを無効にすると、ヒッチの持続時間が280msに変更されることに気付きました。

次に、フレームレートを手動で60fpsから30fpsに強制し(フレームティックループにスリープを挿入することにより)、両方のグリッチが完全に消えました。

これは、レンダリングされないテクスチャを示すスクリーンキャップです。このバグは、深度/ステンシル値、およびカラークリアがオンかオフかに関係なく、すべての32ビットレンダリングサーフェスで発生します。

ありがとうございました!

編集:実際には、テクスチャのちらつきはどのフレームレートでも発生するようですが、40〜45fps未満のどこかで400msのヒッチがなくなります。

レベル選択画面

メインメニュー

4

1 に答える 1

2

これは非常に微妙なドライバーのバグであり、必ずしも Kindle Fire に固有のものではありません。将来、誰かが同じような痛みを避けるのに役立つことを願っています。症状の概要はすでに明確に説明しましたが、バグの原因はシザー rect の設定にあります。

基本的に、画面にズームインまたはズームアウトするアニメーション UI 要素が多数あるため、シザー rect を使用するとかなりファンキーになります。トリガーは、シザー四角形を画面外に設定してから、四角形の外側に水平にレンダリングしているように見えます。そうすることで、GPU が微妙に台無しになった状態になり、すぐには現れないように見えますが、徐々に悪化します。

さらに、これにより、Fire と共通の GPU を持つ Droid RAZR で発生したバグが修正されたようです。このバグは、logcat で見られるゲームでの 5 秒間のフリーズでした。

W/SharedBufferStack(14208): waitForCondition(LockCondition) timed out (identity=173, status=0). CPU may be pegged. trying again.

明らかに、これらのタイプのバグを追跡して正確な状態を特定することは困難ですが、オフスクリーンのシザー四角形の外側でのレンダリングに関連していることは間違いありません。

于 2012-05-30T23:56:59.433 に答える