ソフト内の設定で、解像度を変えられるようにしようと思ったのですが、
プログラムの途中でSetGraphModeを呼び出すとfpsが落ちました。
リフレッシュレート60Hzモニターで実行したところ、およそ44fpsに、また、75Hzモニターだと56fpsほどまで落ちました。
3つの異なるPCで試した結果、いずれの場合もfpsが落ちたので、PC依存による処理落ちではないと考えましたが、実際のところどうなのでしょうか。
以下に、fps落ちが確認されるテストコードを張ります。
-----ここからテストコード-----
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
//fps計測用
int NowTime = 0, PrevTime = GetNowCount(),
LastMeasuredTime = 0, FrameNum = 0;
float fps = 0;
//解像度把握用
int WindowSize = 480;
// ウインドウモードで起動
ChangeWindowMode(TRUE);
// DXライブラリ初期化処理
if (DxLib_Init() == -1) return -1;
// 描画先を裏画面にする
SetDrawScreen(DX_SCREEN_BACK);
// メインループ
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
// 画面に描かれているものを一回全部消す
ClearDrawScreen();
//フレーム数を数える
FrameNum++;
//ホイールのチェック
int WheelNum = GetMouseWheelRotVol();
//解像度変更
if (WheelNum != 0){
WindowSize += WheelNum * 10;
SetGraphMode(WindowSize * 4 / 3, WindowSize, 32);
SetWindowSize(WindowSize * 4 / 3, WindowSize);
}
//1秒ごとにfps計測
if (LastMeasuredTime < GetNowCount() - 1000){
NowTime = GetNowCount();
fps = 1000.0f / (NowTime - PrevTime)*FrameNum;
PrevTime = NowTime;
LastMeasuredTime = NowTime;
FrameNum = 0;
}
//fps描画
DrawNumberPlusToF(0, 0, "fps", fps, 1, GetColor(255, 255, 255));
//ウィンドウサイズ描画
DrawNumberPlusToI(0, 16, "WindowSize(Y)", WindowSize, 10, GetColor(255, 255, 255));
DrawString(0, 32, "マウスホイールの回転で解像度を変更します", GetColor(255, 255, 255));
// 裏画面の内容を表画面に反映させる
ScreenFlip();
}
// DXライブラリ使用の終了処理
DxLib_End();
// ソフトの終了
return 0;
}
-----ここまでテストコード-----
DxLib_Init関数付近でSetGraphMode関数を呼び出す分には、fps落ちは確認されませんでした。