Continuando nossa série de artigos traduzidos do site lazyfoo, e agora que sabemos como criar um timer, chegou a hora de usar esse recurso para calcular o fps.
//Main loop flag bool quit = false; //Event handler SDL_Event e; //Set text color as black SDL_Color textColor = { 0, 0, 0, 255 }; //The frames per second timer LTimer fpsTimer; //In memory text stream std::stringstream timeText; //Start counting frames per second int countedFrames = 0; fpsTimer.start();
Para podermos calcular o frame rate, precisamos ter registro do número de frames renderizados e do número de segundo que se passaram. Antes de entrarmos no loop principal, iniciamos um timer que será usado para calcular o fps e declaramos uma variável para manter um registro do número de frames renderizados.
//Calculate and correct fps float avgFPS = countedFrames / ( fpsTimer.getTicks() / 1000.f ); if( avgFPS > 2000000 ) { avgFPS = 0; }
Para calcular o número de frames por segundo, você precisa pegar o número de frames renderizados e dividir pelo número de segundo que se passaram. Temos que levar em consideraão que é possível que pouco tempo tenha se passado para renderizar o primeiro frame e isso pode nos dar um número muito alto para o fps. Por isso devemos corrigir o valor se for muito alto.
//Set text to be rendered timeText.str( "" ); timeText << "Average Frames Per Second " << avgFPS; //Render text if( !gFPSTextTexture.loadFromRenderedText( timeText.str().c_str(), textColor ) ) { printf( "Unable to render FPS texture!\n" ); } //Clear screen SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF ); SDL_RenderClear( gRenderer ); //Render textures gFPSTextTexture.render( ( SCREEN_WIDTH - gFPSTextTexture.getWidth() ) / 2, ( SCREEN_HEIGHT - gFPSTextTexture.getHeight() ) / 2 ); //Update screen SDL_RenderPresent( gRenderer ); ++countedFrames;
Depois de calcularmos o fps, renderizamos o valor como uma textura na tela. Depois que tivermos renderizado a cena, incrementamos o contador de frames.
Como esse programa é vsynced, provavelmente irá reportar 60 fps. Se quiser saber qual a capacidade de seu hardware, somente crie um renderizador sem vsync.
Como esse programa é vsynced, provavelmente irá reportar 60 fps. Se quiser saber qual a capacidade de seu hardware, somente crie um renderizador sem vsync.