FPS.cpp

説明を見る。
00001 
00002 
00003 
00004 #include <assert.h>
00005 #include <windows.h>
00006 
00007 //========================================================================
00008 //内部変数
00009 //========================================================================
00010 static DWORD beforTime;                                                                 
00011 static DWORD nowTime;                                                                   
00012 static DWORD waitLimitTime = 1000 / 60;                                 
00013 static DWORD dispStartTime;                                                             
00014 static DWORD nowFpsValue;                                                               
00015 
00016 
00017 //========================================================================
00018 //外部公開関数
00019 //========================================================================
00020 void SetFpsValue(DWORD value);                                                  
00021 void SetBeforTime();                                                                    
00022 void SetNowTime();                                                                              
00023 BOOL GetElapsedTime(DWORD *waitTime);                                   
00024 BOOL GetNowFPSValue(DWORD *fpsValue);                                   
00025 
00026 //========================================================================
00031 //========================================================================
00032 void SetFpsValue(DWORD value)
00033 {
00034         waitLimitTime = 1000 / value;           //value=60の場合、1フレームは最大16秒Sleep()させる
00035 }
00036 
00037 //========================================================================
00041 //========================================================================
00042 void SetBeforTime()
00043 {
00044         beforTime = timeGetTime();
00045 }
00046 
00047 //========================================================================
00051 //========================================================================
00052 void SetNowTime()
00053 {
00054         nowTime = timeGetTime();
00055 }
00056 
00057 //========================================================================
00064 //========================================================================
00065 BOOL GetElapsedTime(DWORD *waitTime)
00066 {
00067         DWORD elapsedTime;              //処理時間
00068 
00069         //引数にNULLが入っていたらとめる
00070         assert(waitTime != NULL);
00071 
00072         //1フレームの処理時間を求める
00073         elapsedTime = nowTime - beforTime;
00074         if(elapsedTime < waitLimitTime)
00075         {
00076                 //Sleepする時間より速く処理が終わった場合
00077                 *waitTime = waitLimitTime - elapsedTime;                //Sleepする時間を返す
00078                 return TRUE;
00079         }
00080         else
00081         {
00082                 //Sleepする時間を過ぎてしまった場合
00083                 *waitTime = elapsedTime - waitLimitTime;                //過ぎた時間を入れる(計測用ぐらいしか使い道がないかな)
00084                 return FALSE;
00085         }
00086 }
00087 
00088 //========================================================================
00094 //========================================================================
00095 BOOL GetNowFPSValue(DWORD *fpsValue)
00096 {
00097         //フレームをカウントする
00098         nowFpsValue++;
00099         if(nowTime - dispStartTime > 1000)
00100         {
00101                 //引数にNULLが入っていたらとめる
00102                 assert(fpsValue != NULL);
00103 
00104                 //計測開始時間を今の時間に
00105                 dispStartTime = nowTime;
00106                 //戻り値用引数へFPS値を格納
00107                 *fpsValue = nowFpsValue;
00108                 //FPSカウントを0にする
00109                 nowFpsValue = 0;
00110                 return TRUE;
00111         }
00112 
00113         return FALSE;
00114 }
00115 

FPStestに対してWed Nov 14 09:55:20 2007に生成されました。  doxygen 1.5.2