Posted by & filed under memo, programming.


OpenGLの描画の fps(frame per second) を得るための関数のメモ.

精度はあんまりよくない.

関数が呼び出されるごとに GLframe の数を増やしていき, 1000ms 経過した時点で計算し,値を返す.

この関数を, display 関数の中に組み込んでやればOK.

void getFPS(float& fps)
{
    static int GLframe;
    static unsigned int GLtimebase;
    unsigned int GLtimenow;

    GLframe++;
    GLtimenow = glutGet(GLUT_ELAPSED_TIME);

    if (GLtimenow - GLtimebase > 1000) {
        fps = GLframe * 1000.0 / (GLtimenow - GLtimebase);
        GLtimebase = GLtimenow;
        GLframe = 0;
    }
}

あんまり長く実行させ続けると GLtimenow と GLtimebase がオーバーフローするかも?

まあ, 32bit 環境なら unsigned int は 4294967295 まで値を取れるから,単純計算で50日ぐらい連続で実行しても大丈夫.

.

これより精度のいいものを作るとしたら,どうしたらいいんだろう?

グラフィックボードのSDKを使ってみるとか?

GeForce を使っているなら nVidia が NVIDIA SDK を提供しているので,それを使えばできるかも.

ATI(AMD) も RADEON SDK を提供してるみたい.