diff --git a/source/core/system/debug_overlay.cpp b/source/core/system/debug_overlay.cpp index 1997031..5e81d09 100644 --- a/source/core/system/debug_overlay.cpp +++ b/source/core/system/debug_overlay.cpp @@ -5,53 +5,56 @@ #include #include "core/types.hpp" -#include "game/options.hpp" namespace System { -namespace { -// Posición y tamaño del overlay en coordenadas lógicas (1280×720). -constexpr float OVERLAY_X = 12.0F; -constexpr float OVERLAY_Y_FPS = 12.0F; -constexpr float OVERLAY_LINE_HEIGHT = 18.0F; // separación entre líneas (scale 0.4 → ~16 px alto) -constexpr float OVERLAY_SCALE = 0.4F; -constexpr float OVERLAY_SPACING = 2.0F; -constexpr float OVERLAY_BRIGHTNESS = 1.0F; + namespace { + // Posición y tamaño del overlay en coordenadas lógicas (1280×720). + constexpr float OVERLAY_X = 12.0F; + constexpr float OVERLAY_Y_FPS = 12.0F; + constexpr float OVERLAY_LINE_HEIGHT = 18.0F; // separación entre líneas (scale 0.4 → ~16 px alto) + constexpr float OVERLAY_SCALE = 0.4F; + constexpr float OVERLAY_SPACING = 2.0F; + constexpr float OVERLAY_BRIGHTNESS = 1.0F; -// Cadencia de actualización del valor de FPS mostrado. -constexpr float FPS_UPDATE_INTERVAL = 0.5F; -} // namespace + // Cadencia de actualización del valor de FPS mostrado. + constexpr float FPS_UPDATE_INTERVAL = 0.5F; + } // namespace -DebugOverlay::DebugOverlay(Rendering::Renderer* renderer) - : text_(renderer) - {} + DebugOverlay::DebugOverlay(Rendering::Renderer* renderer, + const Config::RenderingConfig& rendering_cfg) + : text_(renderer), + rendering_cfg_(&rendering_cfg) {} -void DebugOverlay::update(float delta_time) { - fps_accumulator_ += delta_time; - fps_frame_count_++; + void DebugOverlay::update(float delta_time) { + fps_accumulator_ += delta_time; + fps_frame_count_++; - if (fps_accumulator_ >= FPS_UPDATE_INTERVAL) { - fps_display_ = static_cast(fps_frame_count_ / fps_accumulator_); - fps_frame_count_ = 0; - fps_accumulator_ = 0.0F; - } -} - -void DebugOverlay::draw() const { - if (!visible_) { - return; + if (fps_accumulator_ >= FPS_UPDATE_INTERVAL) { + fps_display_ = static_cast(fps_frame_count_ / fps_accumulator_); + fps_frame_count_ = 0; + fps_accumulator_ = 0.0F; + } } - const std::string FPS_TEXT = "FPS: " + std::to_string(fps_display_); - const std::string VSYNC_TEXT = std::string("VSYNC: ") - + (Options::rendering.vsync == 1 ? "ON" : "OFF"); + void DebugOverlay::draw() const { + if (!visible_) { + return; + } - text_.render(FPS_TEXT, - Vec2{.x = OVERLAY_X, .y = OVERLAY_Y_FPS}, - OVERLAY_SCALE, OVERLAY_SPACING, OVERLAY_BRIGHTNESS); - text_.render(VSYNC_TEXT, - Vec2{.x = OVERLAY_X, .y = OVERLAY_Y_FPS + OVERLAY_LINE_HEIGHT}, - OVERLAY_SCALE, OVERLAY_SPACING, OVERLAY_BRIGHTNESS); -} + const std::string FPS_TEXT = "FPS: " + std::to_string(fps_display_); + const std::string VSYNC_TEXT = std::string("VSYNC: ") + (rendering_cfg_->vsync == 1 ? "ON" : "OFF"); + + text_.render(FPS_TEXT, + Vec2{.x = OVERLAY_X, .y = OVERLAY_Y_FPS}, + OVERLAY_SCALE, + OVERLAY_SPACING, + OVERLAY_BRIGHTNESS); + text_.render(VSYNC_TEXT, + Vec2{.x = OVERLAY_X, .y = OVERLAY_Y_FPS + OVERLAY_LINE_HEIGHT}, + OVERLAY_SCALE, + OVERLAY_SPACING, + OVERLAY_BRIGHTNESS); + } } // namespace System diff --git a/source/core/system/debug_overlay.hpp b/source/core/system/debug_overlay.hpp index 89b87a7..3e0237a 100644 --- a/source/core/system/debug_overlay.hpp +++ b/source/core/system/debug_overlay.hpp @@ -7,14 +7,18 @@ #pragma once +#include "core/config/engine_config.hpp" #include "core/graphics/vector_text.hpp" #include "core/rendering/render_context.hpp" namespace System { -class DebugOverlay { - public: - explicit DebugOverlay(Rendering::Renderer* renderer); + class DebugOverlay { + public: + // El rendering_cfg ha de viure tant com l'overlay (el posseeix + // el Director, que sobreviu a tots els sistemes). + DebugOverlay(Rendering::Renderer* renderer, + const Config::RenderingConfig& rendering_cfg); // Acumula FPS. Llamar una vez por frame con el delta del Director. void update(float delta_time); @@ -25,14 +29,15 @@ class DebugOverlay { void toggle() { visible_ = !visible_; } [[nodiscard]] auto isVisible() const -> bool { return visible_; } - private: + private: Graphics::VectorText text_; + const Config::RenderingConfig* rendering_cfg_; bool visible_{true}; // FPS counter — se actualiza cada FPS_UPDATE_INTERVAL segundos. float fps_accumulator_{0.0F}; int fps_frame_count_{0}; int fps_display_{0}; -}; + }; } // namespace System diff --git a/source/core/system/director.cpp b/source/core/system/director.cpp index 24decac..b55627e 100644 --- a/source/core/system/director.cpp +++ b/source/core/system/director.cpp @@ -258,7 +258,7 @@ auto Director::run() -> int { // Overlay de debug (FPS + VSync). Vive en el Director porque es global // a todas las escenas. Toggle con F11 (visible por defecto en _DEBUG). - System::DebugOverlay debug_overlay(sdl.getRenderer()); + System::DebugOverlay debug_overlay(sdl.getRenderer(), Options::rendering); // Bucle principal: construir escena → frame loop → destruir → siguiente. while (context.nextScene() != SceneType::EXIT) {