From 4b64b2bd17433f427197af3679c9c8f5ad5ad1a4 Mon Sep 17 00:00:00 2001 From: hachem Date: Thu, 27 Aug 2026 09:05:17 +0200 Subject: add: application run loop + logging --- src/core/application.cpp | 75 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/core/application.cpp (limited to 'src/core/application.cpp') diff --git a/src/core/application.cpp b/src/core/application.cpp new file mode 100644 index 0000000..fd04e62 --- /dev/null +++ b/src/core/application.cpp @@ -0,0 +1,75 @@ +#include "core/application.h" + +#include "core/assert.h" +#include "core/log.h" + +#include + +namespace Hsdbg +{ + namespace + { + using Clock = std::chrono::steady_clock; + + constexpr float MAX_DELTA_TIME = 0.25f; + + // the run loop has nothing to block on until the window owns it, so it is + // time boxed for now to keep the app from spinning forever + constexpr float PLACEHOLDER_RUN_TIME = 1.0f; + } + + Application* Application::s_instance = nullptr; + + Application::Application(const ApplicationSpec& spec) + : m_spec(spec) + { + HSDBG_ASSERT(s_instance == nullptr, "an Application instance already exists"); + s_instance = this; + + Log::info("{}: starting up", m_spec.name); + } + + Application::~Application() + { + Log::info("{}: shutting down after {} frames", m_spec.name, m_frame_count); + + s_instance = nullptr; + } + + auto Application::get() -> Application& + { + HSDBG_ASSERT(s_instance != nullptr, "no Application instance has been created"); + return *s_instance; + } + + auto Application::run() -> void + { + m_running = true; + + auto last_frame_time = Clock::now(); + + while (m_running) + { + const auto now = Clock::now(); + const float elapsed = std::chrono::duration(now - last_frame_time).count(); + last_frame_time = now; + + m_delta_time = elapsed < MAX_DELTA_TIME ? elapsed : MAX_DELTA_TIME; + m_time += m_delta_time; + m_frame_count += 1; + + update(); + } + } + + auto Application::close() -> void + { + m_running = false; + } + + auto Application::update() -> void + { + if (m_time >= PLACEHOLDER_RUN_TIME) + close(); + } +} -- cgit v1.3