他の人からもらったフレームレートなのですが、
Posted: 2011年3月22日(火) 13:50
フレームレートのサンプルをもらったのですが、一様どのような流れになっているのかを聞いたのですが、
よくわからず、投稿させてもらいました。とくにdbOldtimeをtimeGetTimeで取得したあとに、dbNewtimeをtimeGetTimeで取得していますが、これは同じ値が入るのではないのでしょうか?お願いします。補足この流れでうまくはいきます。
// -------------------------------------------------------------------------------------------------------------- //
// ------------------------------- フレームコントロール関係のグローバル変数の宣言 ------------------------------- //
static DWORD g_dwFrameCount = 0; // フレームカウント用
static double mspf = 1000.0/60;
// -------------------------------------------------------------------------------------------------------------- //
// ------------------------------------- フレームコントロール関係の関数本体 ------------------------------------- //
// FPS の制御を行う関数
BOOL WaitFrame( void )
{
// MilliSeconds Per Frame( 1 フレームにかかる時間( ミリ秒 ))
// 時間計測用
double dbNewTime = 0.0; // 現在の時間格納用 ( 今回関数の呼ばれた時間 )
static double dbOldTime =
( double )timeGetTime( ); // 過去の時間格納用 ( 前回関数の呼ばれた時間 )
static double dbSecond = dbOldTime; // 1 秒用
// フレーム計測用
static DWORD dwCnt = 0;
// 現在の時間を取得
double dbNewTime = ( double )timeGetTime( );
// 1 フレーム分の時間を測る ( 前回の呼び出しから1フレーム経過 )
// 現在の時間から過去の時間を引いて、1フレームにかかる時間よりも大きくなったら
if( dbNewTime - dbOldTime >= mspf )
{
dwCnt ++; // フレーム数 + 1
do
{
// 次の計測の為の調整
dbOldTime += mspf; // 過去の時間に、1フレームにかかる時間を足す
}while( dbNewTime - dbOldTime >= mspf );// 非アクティブからアクティブに変わった時の調整
// 1 秒を測る ( 1秒間の FPS を表示するため )
if( dbNewTime - dbSecond >= 1000.0 )
{
g_dwFrameCount = dwCnt; // 1秒経過ごとにフレームカウントの更新
do
{
dbSecond += 1000.; // 次の計測の為の調整
}while( dbNewTime - dbSecond >= 1000. );
dwCnt = 0; // フレーム数リセット
}
return TRUE;
}
return FALSE;
}
よくわからず、投稿させてもらいました。とくにdbOldtimeをtimeGetTimeで取得したあとに、dbNewtimeをtimeGetTimeで取得していますが、これは同じ値が入るのではないのでしょうか?お願いします。補足この流れでうまくはいきます。
// -------------------------------------------------------------------------------------------------------------- //
// ------------------------------- フレームコントロール関係のグローバル変数の宣言 ------------------------------- //
static DWORD g_dwFrameCount = 0; // フレームカウント用
static double mspf = 1000.0/60;
// -------------------------------------------------------------------------------------------------------------- //
// ------------------------------------- フレームコントロール関係の関数本体 ------------------------------------- //
// FPS の制御を行う関数
BOOL WaitFrame( void )
{
// MilliSeconds Per Frame( 1 フレームにかかる時間( ミリ秒 ))
// 時間計測用
double dbNewTime = 0.0; // 現在の時間格納用 ( 今回関数の呼ばれた時間 )
static double dbOldTime =
( double )timeGetTime( ); // 過去の時間格納用 ( 前回関数の呼ばれた時間 )
static double dbSecond = dbOldTime; // 1 秒用
// フレーム計測用
static DWORD dwCnt = 0;
// 現在の時間を取得
double dbNewTime = ( double )timeGetTime( );
// 1 フレーム分の時間を測る ( 前回の呼び出しから1フレーム経過 )
// 現在の時間から過去の時間を引いて、1フレームにかかる時間よりも大きくなったら
if( dbNewTime - dbOldTime >= mspf )
{
dwCnt ++; // フレーム数 + 1
do
{
// 次の計測の為の調整
dbOldTime += mspf; // 過去の時間に、1フレームにかかる時間を足す
}while( dbNewTime - dbOldTime >= mspf );// 非アクティブからアクティブに変わった時の調整
// 1 秒を測る ( 1秒間の FPS を表示するため )
if( dbNewTime - dbSecond >= 1000.0 )
{
g_dwFrameCount = dwCnt; // 1秒経過ごとにフレームカウントの更新
do
{
dbSecond += 1000.; // 次の計測の為の調整
}while( dbNewTime - dbSecond >= 1000. );
dwCnt = 0; // フレーム数リセット
}
return TRUE;
}
return FALSE;
}