Skip to content

Commit

Permalink
GRAPHICS: Make the FPS calculation a bit less stupid
Browse files Browse the repository at this point in the history
  • Loading branch information
DrMcCoy committed Jan 21, 2014
1 parent ca56ec1 commit 909c5c9
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 76 deletions.
8 changes: 3 additions & 5 deletions src/engines/kotor/module.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -367,11 +367,9 @@ bool Module::handleKeys(const Events::Event &e) {
GfxMan.setFSAA((GfxMan.getCurrentFSAA() == 0) ? 2 : (GfxMan.getCurrentFSAA() * 2));
else if (e.key.keysym.sym == SDLK_TAB)
_area->setHighlightAll(true);
else if (e.key.keysym.scancode == SDL_SCANCODE_F) {
double averageFrameTime, averageFPS;
if (GfxMan.getRenderStatistics(averageFrameTime, averageFPS))
warning("FPS: %lf, AverageFrameTime: %lf", averageFPS, averageFrameTime);
} else
else if (e.key.keysym.scancode == SDL_SCANCODE_F)
warning("FPS: %lf", GfxMan.getFPS());
else
return false;
}

Expand Down
8 changes: 3 additions & 5 deletions src/engines/nwn/module.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -337,11 +337,9 @@ bool Module::handleKeys(const Events::Event &e) {
GfxMan.setFSAA((GfxMan.getCurrentFSAA() == 0) ? 2 : (GfxMan.getCurrentFSAA() * 2));
else if (e.key.keysym.sym == SDLK_TAB)
_currentArea->setHighlightAll(true);
else if (e.key.keysym.scancode == SDL_SCANCODE_F) {
double averageFrameTime, averageFPS;
if (GfxMan.getRenderStatistics(averageFrameTime, averageFPS))
warning("FPS: %lf, AverageFrameTime: %lf", averageFPS, averageFrameTime);
} else
else if (e.key.keysym.scancode == SDL_SCANCODE_F)
warning("FPS: %lf", GfxMan.getFPS());
else
return false;
}

Expand Down
18 changes: 2 additions & 16 deletions src/graphics/graphics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -337,25 +337,11 @@ bool GraphicsManager::setGamma(float gamma) {
return true;
}

double GraphicsManager::getAverageFrameTime() const {
double GraphicsManager::getFPS() const {
if (!_renderer)
return 0.0;

return _renderer->getAverageFrameTime();
}

double GraphicsManager::getAverageFPS() const {
if (!_renderer)
return 0.0;

return _renderer->getAverageFPS();
}

bool GraphicsManager::getRenderStatistics(double &averageFrameTime, double &averageFPS) const {
if (!_renderer)
return false;

return _renderer->getRenderStatistics(averageFrameTime, averageFPS);
return _renderer->getFPS();
}

void GraphicsManager::renderScene() {
Expand Down
5 changes: 1 addition & 4 deletions src/graphics/graphics.h
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,7 @@ class GraphicsManager : public Common::Singleton<GraphicsManager> {
/** Set the overall gamma correction. */
bool setGamma(float gamma);

double getAverageFrameTime() const;
double getAverageFPS() const;

bool getRenderStatistics(double &averageFrameTime, double &averageFPS) const;
double getFPS() const;

/** Render one complete frame of the scene. */
void renderScene();
Expand Down
59 changes: 17 additions & 42 deletions src/graphics/renderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,40 +72,34 @@ class OgreLogger : public Ogre::LogListener {

class OgreAnimator : public Ogre::FrameListener {
private:
static const uint kFrameTimeAverageCount = 5;
double _lastFPS;

std::list<double> _frameTimes;
double _currentFPSTime;
uint _currentFPS;

public:
OgreAnimator() : _lastFPS(0.0), _currentFPSTime(0.0), _currentFPS(0) {
}

bool frameRenderingQueued(const Ogre::FrameEvent &event) {
LOCK_FRAME();

_frameTimes.push_back(event.timeSinceLastFrame);
if (_frameTimes.size() > kFrameTimeAverageCount)
_frameTimes.pop_front();
_currentFPS++;
if ((_currentFPSTime += event.timeSinceLastFrame) >= 1.0) {
_lastFPS = _currentFPS / _currentFPSTime;

_currentFPSTime = 0.0;
_currentFPS = 0;
}

for (Ogre::AnimationStateIterator anims = getOgreSceneManager().getAnimationStateIterator(); anims.hasMoreElements(); anims.moveNext())
anims.current()->second->addTime(event.timeSinceLastFrame);

return true;
}

double getAverageFrameTime() const {
LOCK_FRAME();

double average = 0.0;
for (std::list<double>::const_iterator f = _frameTimes.begin(); f != _frameTimes.end(); ++f)
average += *f;

return average / _frameTimes.size();
}

double getAverageFPS() const {
double averageFrameTime = getAverageFrameTime();
if (averageFrameTime <= 0.0)
return 0.0;

return 1.0 / averageFrameTime;
double getFPS() const {
return _lastFPS;
}
};

Expand Down Expand Up @@ -364,30 +358,11 @@ void Renderer::render() {
_root->renderOneFrame();
}

double Renderer::getAverageFrameTime() const {
double Renderer::getFPS() const {
if (!_animator)
return 0.0;

return _animator->getAverageFrameTime();
}

double Renderer::getAverageFPS() const {
if (!_animator)
return 0.0;

return _animator->getAverageFPS();
}

bool Renderer::getRenderStatistics(double &averageFrameTime, double &averageFPS) const {
if (!_sceneManager)
return false;

LOCK_FRAME();

averageFrameTime = getAverageFrameTime();
averageFPS = getAverageFPS();

return true;
return _animator->getFPS();
}

bool Renderer::hasCapability(RenderCapability c) const {
Expand Down
6 changes: 2 additions & 4 deletions src/graphics/renderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,8 @@ class Renderer {
/** Render one frame. */
void render();

double getAverageFrameTime() const;
double getAverageFPS() const;

bool getRenderStatistics(double &averageFrameTime, double &averageFPS) const;
/** Return the number of frames drawn in the last second. */
double getFPS() const;


private:
Expand Down

0 comments on commit 909c5c9

Please sign in to comment.