AndroidのVSync /実際の30FPS


8

一部のデバイスでフルスピードで実行できないゲームに取り組んでいます。Tegra2では、多くの最適化により、パフォーマンスは約40 fpsです。フレームレートは安定していますが、アニメーションが十分にスムーズではないため、vsyncが必要です。
2.3 Android SDKでは、EGLライブラリーをネイティブで使用できます。だから私はeglSwapIntervalを使用しようとしますが、成功しません。で、このGDC紙、Tegra2はそれを行うことができますようです。

Ps:一定のFPSを強制するThread.sleep()は許容できるソリューションではありません


私はAndroid向けに何も開発していないので、疑わしいように見えますが、スワップ間隔に影響を与えることが可能であるかどうかは確かではありません。それで、アニメーションの途切れがロジックタイムステップの大きな違いに起因する場合、フレームのバッチの平均タイムステップを計算してみる価値はあるでしょうか?このように、おそらく5〜6フレームの期間を使用します。これはvsyncの質問に対する答えではありませんが、固定されたレンダリングタイムステップを導入しなくてもアニメーションに役立つ可能性があります。
EnoughTea 2011

1
Tegra2は即時のレンダラー(タイルではない)なので、eglSwapBufferが1/60秒未満になるまでの時間が経過したかどうかを確認できます。そうでない場合は、16ミリ秒より1ミリ秒長く待機して、eglSwapBufferを実行します。それは恐ろしいだけです!!! 実装されていない場合、Google IO 2011でこの機能について彼らが話すのは非常に奇妙です。
Ellis

回答:


2

一部のopengl esベンチマークのこのスレッドによると、ほとんどのデバイスのドライバーは単にeglSwapIntervalを無視しますが、tegra2はデフォルトでvsyncを有効にする必要があります(eglSwapIntervalを使用して無効にすることができます)。

おそらく、デバイスのvsyncレートは、スタッターが時々ヒットしたり、時々フレームタイムを逃したことが原因で発生するようなものですか?vsyncを無効にすると実際に問題が改善するかどうか試してみましたか?


私はvsyncを無効にしようとしませんでした。eglSwapInterval(...、2)を試したが成功しなかった。なるべく早くトライします。
Ellis

swapintervalパラメータは、通過する必要のあるフレームの最小量を定義しているため、2,2,3,2,2,3,2,2,2,3のように途切れることがある可能性があります。保証されていないようです=)
Jari Komppa

次に、もう1つの小さな注意点を示します。「間隔は、格納される前に、実装に依存する最小値と最大値に静かにクランプされます。これらの値は、それぞれEGLConfig属性EGL_MIN_SWAP_INTERVALおよびEGL_MAX_SWAP_INTERVALによって定義されます。」
Jari Komppa、2011

eglSwapInterval(2)は、42fpsのフレームレートに私を変更しないとEGL_MIN_SWAP_INTERVALは0とMAX 10です
エリス

私が試すことができる他の唯一のことは、0から10までの値を調べて、変更がないかどうかを確認することです。そうでなければ、まあ、機能は壊れています。(または、値0、1、9、および10)
Jari Komppa

0

コレオグラファーAPIを使用して30FPSを実行するサンプルを公開しました。 https://github.com/googlesamples/android-ndk/tree/master/choreographer-30fps それはあなたにとってうまくいきますか?


1
あなたのリンクは役に立つかもしれませんが(私はそれを見ていません)、このサイトでは、リンクが切れた場合に備えてリンクが回答にまとめられ、他の人がそれから何を期待できるかを知っていることが推奨されます。回答にサンプルの役立つ部分または説明を含めることができますか?
Jibbスマート2016

そして、リンクは実際に死んでいます:)
Karu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.