#include "BarinkEngine.h" #include #include extern void Start(); extern void Update(); extern void ImmediateGraphicsDraw(); extern void Stop(); using namespace BarinkEngine; struct EngineStatistics{ unsigned int lastSampleTime; unsigned int frames; float frameTime; unsigned int FPS; }; EngineStatistics* ES; int main(int argc, char* argv[]) { ES = new EngineStatistics(); ES->frames = 0; ES->lastSampleTime = 0; // Startup services BarinkWindow MainWindow = BarinkWindow(800, 600); Renderer renderer = Renderer(); InputManager InputSystem = InputManager(); InputSystem.attach(&MainWindow); GUIManager GUISystem = GUIManager(&MainWindow); // First call to setup game Start(); ES->lastSampleTime = std::chrono::duration_cast (std::chrono::system_clock::now().time_since_epoch()).count(); // Runtime loop while (!MainWindow.WindowShouldClose()) { ES->frames++; unsigned int now = std::chrono::duration_cast (std::chrono::system_clock::now().time_since_epoch()).count(); unsigned int MilliSecondsPast = ES->lastSampleTime - now; if ( MilliSecondsPast >= 1000) { ES->FPS = 1000 / ES->frames ; ES->frameTime = ES->frames / 1000; ES->frames = 0; ES->lastSampleTime = now; } InputSystem.PollEvents(); Update(); renderer.Render(); ImmediateGraphicsDraw(); GUISystem.Render(); MainWindow.SwapBuffers(); } // Shutdown game Stop(); // Shutdown Services delete ES; return 0; } void ShowStats() { ImGui::Begin("Statistics", false, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove ); ImGui::Text("Frames: %i", ES->frames); ImGui::Text("FPS: %i", ES->FPS); ImGui::Text("Frame Time: %f", ES->frameTime); ImGui::End(); }