複数の(モバイル)プラットフォームで実行されているC++でOpenGLES2.0ゲームを書いています。IOS、Android、..では、1つのデバイスを除いて、基本的にすべてが正常に動作します。
特定のシーンの1フレームの計算には、HTCDesireで約8msかかります。もう1つのデバイスであるSamsungGalaxyNexusは、はるかに新しいもので、18〜20ミリ秒かかります。
問題を掘り下げてみたところ、GL_DEPTH_TESTの有効化/無効化に関連していることがわかりました。
- すべてのglEnable(GL_DEPTH_TEST)/ glDisable(GL_DEPTH_TEST)呼び出しをコメントアウトすると、Nexusでは1フレームに必要な時間が1〜2ミリ秒に短縮されます。
- そこで、絶対に必要な場合にのみ発生するようにglEnable()/ glDisable()呼び出しを最適化しました。シーンに3Dと2Dのパーツがあるため、depth_testを使用せずに2dをレンダリングし、深度テストを使用して3dをレンダリングする必要があります。
- 現在、深度テストを有効にし、3Dを描画し、深度テストを無効にし、2Dを描画します
- しかし、それでも計算にはネクサスで18〜20ミリ秒かかります
- また、デプスバッファが必要以上にクリアされているかどうかも確認しました。ただし、フレームの開始時にクリアされます。
深度試験の切り替えに時間がかかる可能性はありますか?
誰かがチェックできる他のアイデアを持っていますか?
アップデート
私がレンダリングした3Dオブジェクトが、計算速度の低下の原因であることがわかりました。
- 3Dオブジェクトを削除すると、パフォーマンスは良好です。
- しかし、同じ3Dオブジェクトがそのような問題を引き起こすことなく別のシーンで使用されています
- そして最も奇妙なこと:NexusはAndroid 4.2を実行し、CPU負荷をオーバーレイとして視覚化するオプションが開発者向けオプションにあります。この設定を有効にしてゲームを開始すると、計算時間は18〜20ミリ秒ではなく5〜6ミリ秒になります。これはどのように関連付けることができますか?