トップページ > 記事閲覧
フレームレートが45fpsになる
名前:くろ 日時: 2015/09/21 11:11

こんにちは。 いつもDxLibを利用させてもらっています。 表題の質問なんですが、私の環境でモニターのリフレッシュレートが60Hzの状態でScreenFlip()を使い画面を更新すると45fpsで固定されてしまいます。 他の方の作品は60fpsが出ているので、試しにDxLibのバージョンを2.25bまで下げたら60fpsになりました。 IDEはVSExpress2013、OSはWin7Home64bit、グラボはGeforce GTX650です。 テストに使ったコードは以下です。 #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int count = 0; int fps = 0; SetDrawScreen(DX_SCREEN_BACK); DxLib_Init(); int bef = GetNowCount(); while (ProcessMessage() != -1) { int now = GetNowCount(); if (now > bef + 1000) { fps = count; count = 0; bef = now; } ClearDrawScreen(); DrawFormatString(0, 0, GetColor(255, 255, 255), "FPS=%d", fps); ScreenFlip(); count++; } DxLib_End(); return 0; }
メンテ

Page: 1 |

Re: フレームレートが45fpsになる ( No.1 )
名前:くろ 日時:2015/09/21 11:24

申し訳ありません。 問題が起きたDxLibのバージョンを書き忘れていました。 バージョンは3.15aです。 なお、3.00eでも同じ現象が起きています。 垂直同期を待たない方法以外で何か解決方法はありますでしょうか?
メンテ
Re: フレームレートが45fpsになる ( No.2 )
名前:くろ 日時:2015/09/21 12:34

追加の調査でわかったのですがProcessMessageとScreenFlipを連続で実行した場合のみ この現象が起こるようです。 ProcessMessage内で垂直同期にかかわる処理をしているのでしょうか? ちなみにSetWaitVSyncFlag(FALSE)にしてScreenFlipの前にWaitVSync(1)を 呼んだ場合は60fpsになりましたが、この方法で何か問題はあるでしょうか?
メンテ
Re: フレームレートが45fpsになる ( No.3 )
名前:くろ(解決) 日時:2015/09/21 16:28

申し訳ありません。お恥ずかしいのですが、ソースを見直しているうちに間違いを発見しました。 具体的には、DxLib_Init()の前にSetDrawScreen(DX_SCREEN_BACK)を呼んでいました。 順番を逆にしたところ問題は起こらなくなりました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存