diff --git a/BarinkEngine/BarinkEngine.cpp b/BarinkEngine/BarinkEngine.cpp index 061ad1f..5f1b339 100644 --- a/BarinkEngine/BarinkEngine.cpp +++ b/BarinkEngine/BarinkEngine.cpp @@ -1,36 +1,18 @@ #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; + // Setup performance sampler + PerfomanceSamplerInit(); + // Startup services BarinkWindow MainWindow = BarinkWindow(800, 600); - Renderer renderer = Renderer(); - InputManager InputSystem = InputManager(); + BarinkEngine::Renderer renderer = BarinkEngine::Renderer(); + BarinkEngine::InputManager InputSystem = BarinkEngine::InputManager(); InputSystem.attach(&MainWindow); @@ -39,27 +21,14 @@ int main(int argc, char* argv[]) { // 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; - } - - + SamplePerformance(); + // Execute main logic InputSystem.PollEvents(); Update(); @@ -86,13 +55,3 @@ int main(int argc, char* argv[]) { 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(); - -} \ No newline at end of file diff --git a/BarinkEngine/Include/BarinkEngine.h b/BarinkEngine/Include/BarinkEngine.h index 4ed7551..8ea66b0 100644 --- a/BarinkEngine/Include/BarinkEngine.h +++ b/BarinkEngine/Include/BarinkEngine.h @@ -1,10 +1,5 @@ #pragma once -#include -#include -#include - #include "glm/glm.hpp" - #include "graphics/Shader.h" #include "graphics/Window.h" #include "graphics/Camera.h" @@ -15,7 +10,9 @@ #include "Graphics/Renderer.h" #include "Graphics/GUI/GUIManager.h" #include "Scene.h" +#include "PerfCounter.h" - - -void ShowStats(); \ No newline at end of file +extern void Start(); +extern void Update(); +extern void ImmediateGraphicsDraw(); +extern void Stop(); diff --git a/BarinkEngine/Include/PerfCounter.h b/BarinkEngine/Include/PerfCounter.h new file mode 100644 index 0000000..0c0ec20 --- /dev/null +++ b/BarinkEngine/Include/PerfCounter.h @@ -0,0 +1,50 @@ +#pragma once +#include +#include + + struct EngineStatistics { + uint32_t lastSampleTime; + float frameTime; + uint32_t verts; + uint32_t DC; + + uint64_t frames; + uint64_t 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 int now = std::chrono::duration_cast(std::chrono::high_resolution_clock::now().time_since_epoch()).count(); + unsigned int 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(); + +} \ No newline at end of file diff --git a/BarinkEngine/graphics/Renderable.cpp b/BarinkEngine/graphics/Renderable.cpp index 7ccf110..7bba4b2 100644 --- a/BarinkEngine/graphics/Renderable.cpp +++ b/BarinkEngine/graphics/Renderable.cpp @@ -1,6 +1,6 @@ #include "Graphics/Renderable.h" #include "AssetManager/ModelImporter.h" - +#include "PerfCounter.h" Renderable* Renderable::Load() @@ -47,6 +47,8 @@ void Renderable::Draw() { VAO.Bind(); elementBuffer.Bind(true); + ES->verts = meshes[0].vertices.size(); + ES->DC++; glDrawElements(GL_TRIANGLES, static_cast(meshes[0].elements.size()), GL_UNSIGNED_INT, NULL); VAO.Unbind();