渋谷ほととぎす通信

完全趣味でやってるUnityメモ。説明できないところを説明できるようにするための個人ブログ。昨日の自分より少しでも大きくなれるように。。。 ※所属団体とは一切関係がありません

C#でDirectX11 FPSを管理する


下記の記事での描画は、MessagePump.Runメソッドを使用しているため、ループ処理の間隔を制御できていませんでした。

今回はFPSを意識して描画処理を実行してみようと思います。

やりたいことは、Draw関数の呼び出し回数をFPSに合わせて制御するということになります。
というおとで、

MessagePump.Run(this, Draw);

MessagePump.Run(this, Loop);

と変えて

void Loop()
{
    // FPSを管理するサムシングを記述する
    Draw();
}

このようにDraw関数はそのまま、Loop関数内にFPS制御処理を書いていきます。

いきなりコードですが、こうなります。

あまり説明することはありませんが、やっていることはシンプルです。

  • StopWatchクラスを使用して、Draw関数の処理時間を取る
  • FPSに合わせてSleepさせる時間を算出してスレッドをSleepさせる

この2つの処理で実装しています。


以上


全体コードも一応載せておきます。

gist.github.com