トップページ > 過去ログ > 記事閲覧
windowモード切替によるFPS減少
名前:ピスタチオ 日時: 2012/01/09 16:33

はじめまして. SetUseASyncChangeWindowModeFunction関数true設定時にWINDOWをフルスクリーン又はWINDOWモードに切替えた際にFPSが60から44まで落ちてしまい,その後FPSが45を超えることがありません. 起動時はWINDOWでもフルスクリーンでもFPSは60です. WINDOWモードを切替えるとFPSが44まで落ちるようです. 原因はなんでしょうか・・・

Page: 1 |

Re: windowモード切替によるFPS減少 ( No.1 )
名前:いっち 日時:2012/01/09 18:52

計測用のソースをご提供頂けますか?
Re: windowモード切替によるFPS減少 ( No.2 )
名前:ピスタチオ 日時:2012/01/09 19:22

FPS測定処理は館さんから借り手ます int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { SetWindowText("TEST"); SetOutApplicationLogValidFlag( false ); SetUseASyncChangeWindowModeFunction( true, NULL, NULL ); SetGraphMode( 640, 480, 32); ChangeWindowMode( false ); if( DxLib_Init() == -1 ){ return ( -1 ); // エラーが起きたら直ちに終了 } SetDrawScreen( DX_SCREEN_BACK ); //ゲームループ while( ProcessMessage() == 0 ){ ClearDrawScreen(); draw_fps(); ScreenFlip(); fps_wait(); } DxLib_End(); // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } #define FLAME 60 static void waitMs( int term ); //fpsのカウンタ、60フレームに1回基準となる時刻を記録する変数 int fps_count,count0t; //平均を計算するため60回の1周時間を記録 int f[FLAME]; int t=0; //平均fps double ave; //FLAME fps になるようにfpsを計算・制御 void fps_wait( void ) { int term,i,gnt; if(fps_count==0){//60フレームの1回目なら if(t==0){//完全に最初ならまたない term=0; }else{//前回記録した時間を元に計算 term=count0t+1000-GetNowCount(); } }else{ //待つべき時間=現在あるべき時刻-現在の時刻 term = (int)(count0t+fps_count*(1000.0/FLAME))-GetNowCount(); } if(term>0){//待つべき時間だけ待つ Sleep(term); } gnt=GetNowCount(); if(fps_count==0){//60フレームに1度基準を作る count0t=gnt; } f[fps_count]=gnt-t;//1周した時間を記録 t=gnt; //平均計算 if(fps_count==FLAME-1){ ave=0; for(i=0;i<FLAME;i++){ ave+=f[i]; } ave/=FLAME; } fps_count = (++fps_count)%FLAME ; } //x,yの位置にfpsを表示 void draw_fps( void ) { if(ave!=0){ DrawFormatString( 0, 0, GetColor( 255,0,0 ),"%.1ffps",1000/ave); } }
Re: windowモード切替によるFPS減少 ( No.3 )
名前:叩き屋 日時:2012/01/10 02:09

最近のバージョンでは、スクリーンモードを切り替えた後、 SetDrawScreen( DX_SCREEN_BACK ); が、必要だったと思います。
Re: windowモード切替によるFPS減少 ( No.4 )
名前:いっち 日時:2012/01/10 12:21

fps_wait は FPS の計測ではなく、垂直同期に頼らずに FPS を制御するための関数だと思います。 DxLib_Init の前で SetWaitVSyncFlag を FALSE に設定してお試し下さい。
Re: windowモード切替によるFPS減少 ( No.5 )
名前:ピスタチオ(解決) 日時:2012/01/12 12:31

どちらの方法でも解決することができました! ありがとうございました!!
Re: windowモード切替によるFPS減少 ( No.6 )
名前:いっち(解決) 日時:2012/01/12 21:51

"どちらか"ではなく、"どちらも"修正が必要な部分だと思います。念のため。

Page: 1 |