■掲示板に戻る■ ■過去ログ倉庫めにゅーに戻る■
[実践] 1フレーム待つ関数を書くスレッド
1 名前: デフォルトの名無しさん 投稿日: 2001/03/12(月) 21:51
FPSがどうとか、VSYNCがどうとかというのは色々議論されてますが
抽象的な話だけで具体的にどうするのというのは書かれてません。
そんなわけで、1フレーム時間が1/60secだと仮定して
なるべく環境に依存しない1フレーム待つ関数を実際に書いてみるスレッドです。

こう書いてみたんだけど、これでいいの?
と言ってコードを見せるのもありです。



2 名前: 1 投稿日: 2001/03/12(月) 21:53
でさっそくなんですが、こんなコード見つけました。
これでSetFPSしてWaitFrameを一度呼べば1フレーム待てるんですか?
Uint32はunsigned int、SDL_GetTicksはWin32だとtimeGetTime、
SDL_DelayはWin32だとSleepと読み替えてください。

static Uint32 fps;
static Uint32 interval;

void
SetFPS( unsigned int _fps ) {
    fps = _fps;
    interval = 1000 / fps;
}

void
WaitFrame( void ) {
    Uint32 nowtime;
    Uint32 lefttime;
    static Uint32 lasttime = 0;

    nowtime = SDL_GetTicks();
    lefttime = lasttime + interval - nowtime;
    if ( lasttime + interval > nowtime ) {
        SDL_Delay( lefttime );
        lasttime = nowtime + lefttime;
    } else {
        lasttime = nowtime;
    }
}


3 名前: デフォルトの名無しさん 投稿日: 2001/03/12(月) 22:28
SDLはWin版もあるからそのまま使えばイイジャーン


4 名前: デフォルトの名無しさん 投稿日: 2001/03/12(月) 23:03
Sleepは精度が悪いと評判なので、さすがにSDL_Delay=Sleepってことはないような。


5 名前: デフォルトの名無しさん 投稿日: 2001/03/12(月) 23:04
あ、いや、SDL_Delayの精度が高いかどうかは知らん


6 名前: デフォルトの名無しさん 投稿日: 2001/03/12(月) 23:13
リフレッシュレートスレでやりゃいーんじゃねぇの


7 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 00:07
吾輩もそう思った。