ゲームエンジニアの雑記ブログ

ゲームエンジニアの雑記ブログ。テーマ自由、技術について解説します

C#でDirectX11 FPSを管理する

C#でDirectX11 FPSを管理する

こんにちは、エンジニアのオオバです。

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

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

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

MessagePump.Run(this, Draw);  

MessagePump.Run(this, Loop);  

と変えて

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

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

いきなりコードですが、こうなります。
FPSを意識したループ処理の部分コード · GitHub

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

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

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

以上

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

FpsLoopFull.cs · GitHub

オススメ記事
検証環境
  • Windows8.1
  • SlimDX 2.0.13.43