#pragma once #include #include struct EngineStatistics { long long lastSampleTime; float frameTime; uint32_t verts; uint32_t DC; long long frames; long long FPS; }; extern EngineStatistics* ES; inline void PerfomanceSamplerInit(){ ES = new EngineStatistics(); 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(); }