イメージを一定の割合で表示するはずのモジュールを構築しています(あらかじめ定義されているわけではありませんが、 )。qt&openglのタイミング精度とvsyncの問題を表示する画像、C++
私の研究から、openGL呼び出し(SwapIntervalファミリ)でvsyncを有効にした後、QGLWidgetがこのタスクに適したツールであるという結論に達しました。
しかし、実際にスワッピング機構を実装する方法はわかりません。タイマーを使用する必要がありますか? 333.3 ms(3 Hz)のタイマーを設定した場合、リフレッシュレートが60 Hz(1サイクルあたり16.67、したがってタイマーは20サイクル)の場合、タイミングは問題ありませんか?そしてレートが9Hzでなければならない場合、私は得ることができる最高ですので、100 + 16.67のためのタイマーを設定する必要がありますか? そして、タイマーがOKなら、私はtimeoutイベントを送るときにpaintGL()を呼び出すべきですか?
おかげ
ありがとうございますが、「V-Synced buffer swap」はどういう意味ですか?どのようにして測定を開始できますか?それが私が制御またはアクセスできるものですか?バッファスワップは暗黙のうちに呼び出され、私のものではありません。 – JLev
@JLev:技術的にはQt-4の遺産であるQGLWidgetを使用しています.QOpenGLWindowを使用するQt-5では、少し複雑になりました。とにかく、QGLWidgetには、その名前が意味するものを正確に行うメンバ関数 'QGLWidget :: swapBuffers'があります。ただし、実際に同期させるには、V-Syncを有効にする必要があります。これはグラフィックスドライバの設定と実行時に要求される動作が '... swap_control'拡張(' swap_control'のためのhttp://opengl.org/registryの検索を参照)を使って細かく調整されている場合に強制/禁止することができます。 – datenwolf
あなたの提案を実装しようとすると、私はv-syncを一貫させるのが難しいです。私はおそらく参照するためにswapbuffersを呼び出す場合、私は "QOpenGLContext :: swapBuffers()は非露出のウィンドウで呼び出され、動作は定義されていません。"空白をレンダリングして使用するだけですか? – JLev