8
votes

Comment calculer FPS dans OpenGL?

void CalculateFrameRate()
{    
    static float framesPerSecond    = 0.0f;       // This will store our fps
    static float lastTime   = 0.0f;       // This will hold the time from the last frame
    float currentTime = GetTickCount() * 0.001f;    
    ++framesPerSecond;
    if( currentTime - lastTime > 1.0f )
    {
        lastTime = currentTime;
        if(SHOW_FPS == 1) fprintf(stderr, "\nCurrent Frames Per Second: %d\n\n", (int)framesPerSecond);
        framesPerSecond = 0;
    }
}
Should I call this function in void play(void) or void display(void)?Or it does not make any difference?

1 commentaires

Qu'est-ce que lecture (void) ? Notez que les choses sont un peu plus compliquées car les GPU sont imprévisibles: Stackoverflow.com/Questtions/8779936/...


3 Réponses :


7
votes

Vous devez le mettre dans la boucle d'affichage. Voici un article qui explique certaines extricacies des boucles de jeu que vous devriez lire.


0 commentaires

1
votes

Si vous avez une sorte de routine de synchronisation, je vous suggère de placer l'appel juste après cela, c'est-à-dire avant les grands calculs. Sinon, les calculs de chronométrage peuvent être shaky et donner des valeurs différentes chaque boucle ... et une note, il vaut mieux avoir un FPS stable que d'un FPS fluctuant juste pour le maximiser. La fluctuation même si subtile rend le spectateur / joueur conscient que tout est une partie et que l'immersion est perdue.


0 commentaires

0
votes
void CalculateFrameRate()
{
    static float framesPerSecond = 0.0f;
    static int fps;
    static float lastTime = 0.0f;
    float currentTime = GetTickCount() * 0.001f;
    ++framesPerSecond;
    glPrint("Current Frames Per Second: %d\n\n", fps);
    if (currentTime - lastTime > 1.0f)
    {
        lastTime = currentTime;
        fps = (int)framesPerSecond;
        framesPerSecond = 0;
    }
}

0 commentaires