farmlands/src/graphics/GuiRenderer.cpp

73 lines
1.4 KiB
C++

/*
* GuiRenderer.cpp
*
* Created on: Nov 13, 2016
* Author: tibi
*/
#include <GameState.h>
#include <graphics/GuiRenderer.h>
#include <resources/Resources.h>
#include <sstream>
#include <SDL2/SDL.h>
namespace farmlands
{
namespace graphics
{
GuiRenderer::GuiRenderer()
: m_gameState(nullptr),
m_fps(0),
m_fpsIndex(0)
{
}
GuiRenderer::~GuiRenderer()
{
}
void GuiRenderer::initialize(GameState* gameState)
{
m_gameState = gameState;
}
void GuiRenderer::render()
{
computeFps();
// Prepare stuff
TTF_Font* font = m_gameState->resManager.font(resources::R::Fonts::DejaVuSans, 10);
SDL_Color white = { 255, 255, 255, 255 };
SDL_Rect dest = { 10, 10, 0, 0 };
// Figure out what text to print
std::stringstream textStream;
textStream << "FPS: " << m_fps;
// Render text
SDL_Texture* fpsText = m_gameState->sdlRenderer.renderText(textStream.str(), font, white);
SDL_QueryTexture(fpsText, NULL, NULL, &dest.w, &dest.h);
SDL_RenderCopy(m_gameState->sdlRenderer.internalRenderer(), fpsText, NULL, &dest);
}
void GuiRenderer::computeFps()
{
// Compute FPS
m_fpsVals[m_fpsIndex++] = 1.0f / m_gameState->elapsedTime;
if (m_fpsIndex >= GUIRENDERER_FPS_VALS)
{
m_fpsIndex = 0;
m_fps = 0;
for (int i = 0; i < GUIRENDERER_FPS_VALS; i++)
m_fps += m_fpsVals[i];
m_fps /= GUIRENDERER_FPS_VALS;
}
}
} /* namespace graphics */
} /* namespace farmlands */