#pragma once #include #include struct EngineStatistics { float frameTime; uint32_t verts; uint32_t DC; long long lastSampleTime; long long frames; long long FPS; }; extern EngineStatistics ES; inline void PerfomanceSamplerInit(){ ES.frames = 0; ES.lastSampleTime = 0; ES.lastSampleTime = std::chrono::duration_cast(std::chrono::high_resolution_clock::now().time_since_epoch()).count(); } inline void SamplePerformance(void) { ES.frames++; ES.DC = 0; ES.verts = 0; unsigned long long now = std::chrono::duration_cast(std::chrono::high_resolution_clock::now().time_since_epoch()).count(); unsigned long long MilliSecondsPast = now - ES.lastSampleTime; if (MilliSecondsPast >= 1000) { ES.frameTime = (float)1000 / ES.frames; ES.FPS = ES.frames; ES.frames = 0; ES.lastSampleTime = now; } } inline void ShowStats() { ImGui::Begin("Statistics", false, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove); ImGui::Text("FPS: %i", ES.FPS); ImGui::Text("Frame Time: %f", ES.frameTime); ImGui::Text("Verts: %i", ES.verts); ImGui::Text("Draw Calls: %i", ES.DC); ImGui::End(); }