added high resolution timer

This commit is contained in:
Anselme 2015-12-01 10:15:14 +01:00
parent 04a82a7364
commit c3d5e23518
2 changed files with 31 additions and 3 deletions

View File

@ -4,6 +4,7 @@
#include "glassert.h"
#include "camera.h"
#include "module.h"
#include <chrono>
// main methods
@ -60,7 +61,11 @@ void SparrowRenderer::renderGL()
for(ModuleNode &m : modules)
{
if(m.isEnabled)
{
std::chrono::high_resolution_clock::time_point t = std::chrono::high_resolution_clock::now();
m.module->renderGL(getCamera(), scene);
m.seconds = std::chrono::duration_cast<std::chrono::duration<double>>(std::chrono::high_resolution_clock::now() - t).count();
}
}
}
@ -69,6 +74,24 @@ bool SparrowRenderer::isModernOpenGLAvailable()
return modernOpenglAvailable;
}
// clock methods
double SparrowRenderer::getFPS()
{
double totalTime = 0;
for(ModuleNode &m : modules)
{
if(m.isEnabled)
totalTime += m.seconds;
}
return 1./totalTime;
}
double SparrowRenderer::getModuleTime(int moduleId)
{
return modules[moduleId].seconds;
}
// module methods
void SparrowRenderer::addModule(Module* myModule, std::string name)

View File

@ -1,7 +1,7 @@
#ifndef SPARROWRENDERER_H
#define SPARROWRENDERER_H
#include <list>
#include <vector>
#include <string>
class Camera;
@ -18,6 +18,10 @@ public:
void renderGL();
static bool isModernOpenGLAvailable();
// clock methods
double getFPS();
double getModuleTime(int moduleId);
// modules methods
void addModule(Module* myModule, std::string name);
int getNbModules();
@ -35,16 +39,17 @@ protected:
Module* module;
std::string name;
bool isEnabled;
double seconds;
s_moduleNode(Module* myModule, const std::string &myName) : module(myModule), name(myName), isEnabled(true) {}
} ModuleNode;
Camera* camera;
Scene* scene;
std::list<ModuleNode> modules;
std::vector<ModuleNode> modules;
static bool modernOpenglAvailable;
std::list<ModuleNode>::iterator getModuleNode(std::string name);
std::vector<ModuleNode>::iterator getModuleNode(std::string name);
};
#endif // SPARROWRENDERER_H