Win32 プロジェクトから Qt プロジェクトに OpenGL アプリケーションを移植しています。
win32 プロジェクトでは、前のフレームが終了するとすぐに次のフレームを実行し続けるメインループしかありませんでした。
Qt と OpenGL について見つけたチュートリアルでは、タイマーを使用してシーンの更新を制御しています。ただし、できるだけ多くのフレームをできるだけ頻繁にレンダリングしたいのですが、どうすればよいですか?
ただし、できるだけ多くのフレームをできるだけ頻繁にレンダリングしたいのですが、どうすればよいですか?
Qtではありません。Qt はイベント ループを完全に制御するため、アイドル操作を直接実行する手段はありません。Qt でアイドル操作を実行する標準的な方法は、タイムアウト 0 で QTime を使用することです。
もう 1 つの可能性は、OpenGL 操作のためだけに 2 番目のスレッドを使用することでした。ただし、確実に動作させるには、その 1 つのスレッド専用の OpenGL コンテキストを作成する必要があります。
Qt は、メイン ループの主要なタスクが画像のレンダリングであり、入力とイベントの管理が二次的なものにすぎないような種類のプログラムに適したツールキットではありません。
update()
ペイント ハンドラの最後で呼び出してみてください。
これにより、別の再描画イベントがキューに入れられます。
ただし、できるだけ多くのフレームをできるだけ頻繁にレンダリングしたいのですが、どうすればよいですか?
ゼロintervalで QTimer を使用します。
Qt と OpenGL の本質的な原則は、できるだけ早くレンダリングすることではなく、必要なときにいつでもレンダリングすることです (大きな違いです)。
システムの最大フレームレートを要求する必要があります (OpenGL でサンプルを検索してください。申し訳ありませんが、どこで見たか覚えていません)。それが完了したら、この最大フレームレートに基づいてタイマーを作成するだけで、必要なものが得られます.