hgimg3使用時での垂直同期について改善したい点があるのですが、どうしたら良いのか
解決策が分からない為、質問いたします。
現在、hgimg3を利用した自作のゲームで、フルスクリーン時に垂直同期を取るために、
掲示板に投稿されていたmod_d3d9vsyncというモジュールを使用しております。
http://hsp.tv/play/pforum.php?mode=pastwch&num=53549
おかげさまで標準命令では出来ないfpsの安定化は果たせたのですが、
良く見ると時々fpsが落ち込んでいて少々気になっております。
自作のゲームで計測してみたのですが、約13分(全46563フレーム)のプレイで、
fps60が44885フレーム、59が1558フレーム、58以下が120フレームという結果になりました。
ちなみに、mod_d3d9vsyncモジュール内のd3d9vsync_fps(1秒間のフレーム数)を
記録しての計測です。
可能であればfps60の状態をもっと増やしたいと考えておりますが、どうすれば
改善することが出来るのか悩んでおります。
最初に疑ったのは、ゲームの処理自体が重いからフレーム落ちが発生しているのでは?
という事です。
しかし、mod_d3d9vsync内でタイミングを取るために行っているSleep処理の時間を見ると
おおむね8msから14msの間であり、ゲームの処理自体は4msから9ms前後で済んでいると
判明しました。
ただ、0msというのがまれに出ており(計18フレーム)少々気にはなりましたが、
fpsが59以下になった時に発生している訳ではないので関連性は不明です。
次に疑ったのは、mod_d3d9vsync内でタイミングを取っているSleep処理が長すぎる為
フレーム落ちが発生しているのでは?、という事です。
mod_d3d9vsyncモジュール内を見ると、フルスクリーン時のSleep減算値として
Sleep_adjust_fullという変数があり、そこに1が入っていた為2に増やして、
Sleep時間を減らしてみました。
しかし状況は改善されませんでした。3に増やしても同様でした。
そもそも走査線を監視しているならSleep処理は必要ないのでは、と思いSleep処理の
行をコメントアウトしてみました。しかし状況は改善されませんでした。
しかも、タイトル画面の処理で120fps前後に急上昇するような不安定な状況に
なりました。
次に、mod_d3d9vsyncモジュール内にあるRasterAdjustという命令を使用して
走査線監視位置を10に変更してみましたがこれも効果はありませんでした。
このように、原因がよく分からないのでどう対処すれば良いのか分からず
お手上げ状態です。
他に原因を突き止める手段はありますでしょうか?
よろしくお願い申し上げます。
もうひとつ、mod_d3d9vsyncモジュールに関して要望点があります。
それは、フレームレートを小数点以下にも対応して欲しいという事です。
自分のデスクトップ環境は1920x1200dot 59.94Hzの為、自作のゲームを
ウィンドウモードで遊ぶとスクロールがガクガクになってしまいます。
d3d9vsync_initでフレームレートを60に設定、59に設定、どちらにしても
綺麗にスクロールしてくれません。
以上、よろしくお願い申し上げます。