フレームレートが44になる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
YYSS
記事: 125
登録日時: 9年前
連絡を取る:

フレームレートが44になる

#1

投稿記事 by YYSS » 8年前

Dxライブラリで、ウィンドウとフルスクリーンの切換を行うとフレームレートが44になってしまいます。
切換前はちゃんと60(モニターのフレームレート)で動いているのですが、1度切換を行うと44になってしまいます。

検証ソース

コード:

/*================================================================
		テストプログラム
================================================================*/
#include <DxLib.h>
#include <math.h>

/*================================================================
		WinMain
================================================================*/
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						LPSTR lpCmdLine, int nCmdShow ){

	//***** 必須 ****************************************

	//ウィンドウタイトル名
	SetMainWindowText( "Ideal" );
	//フルスク時の設定
	SetGraphMode( 640, 480, 32 );
	//ログなし
	SetOutApplicationLogValidFlag( false );

	//スクリーン設定
	ChangeWindowMode( true );

	// DXライブラリ初期化処理
	if( DxLib_Init() == -1 ){
		return -1 ;			// エラーが起きたら直ちに終了
	}
	//描画を裏画面
	SetDrawScreen( DX_SCREEN_BACK );

	//****************************************************

	bool	screen		= true;
	int		BeforeCount	= GetNowCount();
	int		fps			= 0;
	int		fpsMax		= 0;
		
	//メインループ
	while( CheckHitKey( KEY_INPUT_ESCAPE ) == 0 && ProcessMessage() == 0 ){

		//=====画面初期化=====
		ClsDrawScreen();


		if( CheckHitKey( KEY_INPUT_Z ) ){
			screen		= !screen;
			ChangeWindowMode( screen );
		}

		//1秒経過した
		if( GetNowCount() - BeforeCount >= 1000 ){
			BeforeCount	= GetNowCount();
			fpsMax		= fps;
			fps			= 0;
		}


		DrawFormatString( 300, 300, 0xffffff, "%d", fpsMax );
		
		fps	++;

		//=====裏描画処理=====
		ScreenFlip();

//		WaitKey();

	}	//ループ端



	//***** 必須 ****************************************

	DxLib_End() ;			//DXライブラリ使用の終了処理
	return 0 ;				//ソフトの終了

	//***************************************************
}
切換の後に何か設定が必要なのでしょうか?
グラフィックハンドルなど描画関係は再ロードしないといけないのは分かるのですが、
フレームレートが変わってしまう原因が分かりません。

それとも私の環境がいけないのでしょうか?
モニターのリフレッシュレートは60Hzから変わってないので、ソフト側の問題だと思うのですが・・・

~開発環境~
 Windows 7 Ultimate SP1 32bit
 Visual C++ 2010
 DXライブラリ
添付ファイル
2012-1-8 22-12-21.png
2012-1-8 22-12-21.png (15.2 KiB) 閲覧数: 768 回
2012-1-8 22-11-56.png
2012-1-8 22-11-56.png (15.24 KiB) 閲覧数: 768 回

narue

Re: フレームレートが44になる

#2

投稿記事 by narue » 8年前

当方の環境でソースを実行したところ、同じ結果になりました。

48行目のChangeWindowMode( screen );
の後、49行目に SetDrawScreen( DX_SCREEN_BACK );
を追記したところ、60fpsが維持されました。

また、30行目の SetDrawScreen( DX_SCREEN_BACK );
をコメントアウトしても 44~45fps になります。

確かな事は言えませんが、これらのことから想像するに、
ChangeWindowMode() を実行すると描画対象スクリーンがフロントに戻ってしまうという事なのかも知れません。

beatle
記事: 1280
登録日時: 8年前
住所: 埼玉
連絡を取る:

Re: フレームレートが44になる

#3

投稿記事 by beatle » 8年前

narue さんが書きました:確かな事は言えませんが、これらのことから想像するに、
ChangeWindowMode() を実行すると描画対象スクリーンがフロントに戻ってしまうという事なのかも知れません。
この想像は合っています.DXライブラリのリファレンスマニュアルにも書いてあることです.
http://homepage2.nifty.com/natupaji/DxL ... html#R11N1

アバター
YYSS
記事: 125
登録日時: 9年前
連絡を取る:

Re: フレームレートが44になる

#4

投稿記事 by YYSS » 8年前

返答遅れて申し訳ありません。

リファレンスマニュアルは見たのですが、見逃していたようです;;
画像ハンドルがクリアされるだけでなく、描画設定も初期値に戻るんですね。
これからは、注意深くリファレンスを読むようにしたいと思います。

回答ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る