2012-08-14 49 views
7

NDKとeglコマンドを使用してアンドロイドタブレットのレンダリング時間が非常に短くて問題があります。私はeglSwapBuffersへの呼び出しをタイムアウトしており、デバイスのフレームレートを頻繁に超える時間を費やしています。リフレッシュに同期していることは分かっていますが、それは約60FPSです。eglSwapBuffersが不安定/遅い

私がスワップを呼び出す間に発行する唯一のコマンドはglClearなので、私が問題を引き起こしていることは何もわかりません。フレームレートをクリアするだけでも30FPSに落ちます(しかし、不安定です)。

同じデバイス上で、JavaのシンプルなGLプログラムは60FPSで簡単にレンダリングされるため、基本的にはハードウェアの問題ではありません。私は、GLコンテキストを設定するためのAndroid Javaコードを見てきましたが、大きな違いは見られません。私もすべての設定属性を使ってプレイしましたが、スピードを少し変えるものもありますが、この恐ろしいフレームレートの低下を変えるものはありませんでした。

イベントポーリングが問題ではないことを確認するために、レンダリングをスレッドに移動しました。そのスレッドはレンダリングするだけで、クリアとスワップを繰り返し呼び出します。遅い性能は依然として持続しています。

私は何をチェックするべきではなく、問題の可能性に関する提案を探しています。

+0

測定自体が時間を食べていないかどうかを確認してみてください。 – Vasaka

+0

'eglSwapBuffers'はアンドロイドのブロッキングコールで、時々fpsに影響します。また、あなたは 'android:hardwareAccelerated'を試しました – blganesh101

+0

いくつかのコードを投稿できますか?可能であればベンチマークコードを含めてください。通常、OpenGLの状態を "コミット"する(バッファスワップはそれらの1つかもしれません)のは、あなたが呼び出したすべての前のコマンドを実際に処理するものであるためです。しかし、バッファスワップの間だけglClearingするので、私はそれが可能であるかどうかはわかりません。とにかく、いくつかのコードを見てみましょう。 –

答えて

3

これは100%信頼できると回答するには十分な情報がありません(実際にテストしているデバイス、正確な設定など)。この種の動作は通常、ウィンドウとサーフェスのピクセル形式の不一致などによって発生します。 16bit(RGB565)と32bit。

0

FB_MULTI_BUFFER=3環境変数は、最新のLTIBビルド(Xなし)を使用したFreescale i.MX 6(Sabrelite)ボードでのマルチバッファリングを有効にします。あなたのGFXドライバはこのようなものを必要とするでしょう。

関連する問題