0

さて、私はこの小さな「プログラム」を作成していて、FPS を計算できるようにしたいと考えています。各フレームと呼ばれる関数をフックすると、FPS を計算できる可能性があるという考えがありましたか?

これは完全な失敗です。このコードをもう一度見ると、これが機能すると考えるのがどれほど愚かであったかがわかります。

int FPS = 0;
void myHook()
{
    if(FPS<60) FPS++;
    else FPS = 0;
}

明らかにこれはばかげた試みですが、そもそもなぜそれが機能すると論理的に考えたのかはわかりません...

しかし、ええ、各フレームと呼ばれる関数をフックして FPS を計算することは可能ですか?

私は座って、これを行うための可能な方法を考えていましたが、何も思いつきませんでした. どんな情報でも何でも役に立ちます、読んでくれてありがとう:)

4

3 に答える 3

1

連続するフレーム間の時間差を見つけることができます。この時間の逆数がフレーム レートになります。現在の時刻をミリ秒単位で返す関数 getTime_ms() を実装する必要があります。

unsigned int prevTime_ms = 0;
unsigned char firstFrame = 1;
int FPS                  = 0;

void myHook()
{
    unsigned int timeDiff_ms = 0;
    unsigned int currTime_ms = getTime_ms(); //Get the current time.

    /* You need at least two frames to find the time difference. */
    if(0 == firstFrame)
    {
        //Find the time difference with respect to previous time.
        if(currTime_ms >= prevTime_ms)
        {
            timeDiff_ms = currTime_ms-prevTime_ms;
        }
        else
        {
            /* Clock wraparound. */
            timeDiff_ms = ((unsigned int) -1) - prevTime_ms;
            timeDiff_ms += (currTime_ms + 1);
        }

        //1 Frame:timeDiff_ms::FPS:1000ms. Find FPS.
        if(0 < timeDiff_ms) //timeDiff_ms should never be zero. But additional check.
            FPS = 1000/timeDiff_ms;
    }
    else
    {
        firstFrame  = 0;
    }
    //Save current time for next calculation.
    prevTime_ms = currTime_ms;

}
于 2016-11-26T13:53:59.523 に答える