0

だから私は OpenTK (OpenGL) で書かれたこの素敵な c# アプリケーションを持っています...それはフルスクリーンの GL ウィンドウを使用し、想定されているように、できる限り OnRenderFrame メソッドを自動実行し、素晴らしい 60 FPS ゲームを取得します。

しかし、GL ウィンドウではなく、Windows フォームの GLControl 内でゲームを使用したいと考えています。なんらかの理由で、onrenderframe メソッドを 1 回実行するだけです。ドキュメントに記載されているように Application.Idle を使用して実行しようとしましたが、最終的には毎秒約5フレームになります。

元のアプリケーションのようにループで実行するにはどうすればよいですか?

編集:基本的に私が探しているのは、1 秒あたり 60 フレームで OpenGL ウィンドウを初期化するために使用する game.Run(60) に似たものです。

4

2 に答える 2

1

GLControl is event-based, so every frame will be rendered only after manual GLControl.Invalidate() call.

Actually you don't need high fps all the time. You need only to render changes. So variable fps might be enough good for you, as it takes less system resources.

Fps value while input is active depends on input device, for example, my touchpad gets ~60 events per second, and a4tech mouse with 1000Hz sampling frequency gets ~750 fps on the same basic sample.

Anyway, if you insist on constant fps, you may call Invalidate() in a timer, as said above.

于 2016-03-05T15:37:18.337 に答える
0

1/60 秒ごとに GLControl.Invalidate() を呼び出すタイマーを作成します。また、Application.Idle を使用してアニメーションを実行することはお勧めしません。予期しない動作が発生するためです。バッファを正しくスワップしていますか?

于 2014-06-10T21:56:43.187 に答える