// debug_overlay.cpp - Implementación del overlay de debug. #include "core/system/debug_overlay.hpp" #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; // Cadencia de actualización del valor de FPS mostrado. constexpr float FPS_UPDATE_INTERVAL = 0.5F; } // namespace DebugOverlay::DebugOverlay(Rendering::Renderer* renderer) : text_(renderer), #ifdef _DEBUG visible_(true), #else visible_(false), #endif fps_accumulator_(0.0F), fps_frame_count_(0), fps_display_(0) {} 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; } 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"); 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