Chiharu の日記

絵描き C/C++ プログラマーの日記です。

Parallel force - パラレル・フォース 〜FPS とティアリング

パラレル・フォースの過負荷時の処理について、処理落ちかコマ落ちのいずれにしようか迷いましたが、コマ落ちにしました。詳細はこちら
昨日までの実装では、描画処理後にタスク処理を逐次実行していたのですが、これだとコマ落ちの際にタスクの処理間隔が著しく乱れてしまうため、本日のアップ内容では、タスク処理と描画処理を非同期で動作させるようにしました。えいやーで実装したので、パフォーマンス面でもう少し調整が必要かな、と思ってます。
また、今回のデモではマウス追従型のエフェクトをひとつ追加しました。パーティクル的な動作を実験してみたかったのですが、パッと思いついて作ったらこんな感じになりました。うようよ動きます。
ところで、FPS タイマーにマルチメディア タイマー(timeGetTime API)を使用しているのですが、これ、パフォーマンス カウンタ(QueryPerformanceCounter API)の方が良いんでしょうか。パフォーマンス カウンタの方が精度は良さそうなのですが、使用制限が厳しいかな、と思ってます。当該 API を使えない環境の考慮が必要だったり、CPU コアに計測スレッドを張り付かせる必要があったり。んー。この辺ももうちょっと調整かなぁ。
あー。あと、もうひとつ。FPS タイマーの実装により、手元の環境(Core i7)でのフレーム レートが半分くらいまで落ちたのですが、ティアリングえらいこっちゃな印象です。パラレル・フォースの場合、画面を分割の上、分割単位で非同期描画しているので、ティアリングの発生状況が普通(上から順)ではなくて、ちょっといやらしい感じです。せめてバックバッファ用意したほうが良いのかなぁ。これも要検討です。
作れば作るほど課題が見えてくる。良い傾向…なのかな。