diff --git a/docs/audit-core-rendering.md b/docs/audit-core-rendering.md index 4321ec7..3d8f1eb 100644 --- a/docs/audit-core-rendering.md +++ b/docs/audit-core-rendering.md @@ -47,10 +47,10 @@ Los IDs se mantienen estables una vez asignados. Cada entrada apunta al(los) fic | HC-03 | `gif.cpp:71,95,…` | LZW `<11`/`<12`/`<2` y máscaras `0x80/0x70/0x07…` sin nombre | Menor | PENDING | constantes con nombre | | HC-04 | `notifier.hpp:41-46`, `render_info.hpp:38-40` | HUD constants hardcoded en clase, no en `defaults`/YAML | Importante | PENDING | `Defaults::Hud::…` o config.yaml | | HC-05 | `render_info.cpp:19` + `notifier.hpp:43` | `TEXT_SIZE=8` duplicado | Menor | PENDING | constante global font | -| HC-06 | `render_info.cpp:64,138-139,193-195` | `segments_[3]` hardcode del segmento tiempo | Importante | PENDING | `enum SegmentId` | -| HC-07 | `render_info.cpp:207` | `% 3` hardcode nº de entradas enum | Menor | PENDING | `RENDER_INFO_POSITION_COUNT` | +| HC-06 | `render_info.cpp:64,138-139,193-195` | `segments_[3]` hardcode del segmento tiempo | Importante | DONE | constants `FPS/DRIVER/SHADER/TIME_SEGMENT` | +| HC-07 | `render_info.cpp:207` | `% 3` hardcode nº de entradas enum | Menor | DONE | `Defaults::RENDER_INFO_POSITION_COUNT` | | HC-08 | `crtpi_pipeline.cpp:97` | `768.0f / h / 3.0f` magic en shader | Menor | PENDING | uniforme o comentario | -| HC-09 | `render_info.cpp:179-183,194-195` | shadow offset +1,+1 magic | Menor | PENDING | `SHADOW_DIST` | +| HC-09 | `render_info.cpp:179-183,194-195` | shadow offset +1,+1 magic | Menor | DONE | `SHADOW_OFFSET_PX` | | HC-10 | `gif.cpp:162` | `processImageDescriptor` params `[[maybe_unused]]` vestigiales | Menor | PENDING | quitar args | ## 3. Parches e improvisaciones @@ -64,7 +64,7 @@ Los IDs se mantienen estables una vez asignados. Cada entrada apunta al(los) fic | PATCH-05 | `gif.cpp:12-15` | comentario "reemplaçar macro READ" | Menor | PENDING | limpiar comentario | | PATCH-06 | `gif.cpp:83-86` | guard self-reference defensivo | Menor | WONTFIX | dejar, cambiar `cerr` → logger futuro | | PATCH-07 | `sdl3gpu_shader.cpp:17,162` + `crtpi_pipeline.cpp:16,162` | `NOLINTBEGIN` gigantes sobre MSL | Importante | DONE | eliminats amb CONV-03 | -| PATCH-08 | `render_info.cpp:64,138-139` | `mono_digits=true` asignado 2 veces | Menor | PENDING | init única | +| PATCH-08 | `render_info.cpp:64,138-139` | `mono_digits=true` asignado 2 veces | Menor | DONE | inicialització única via refreshSegments | ## 4. Acoplamiento innecesario @@ -129,4 +129,5 @@ Los IDs se mantienen estables una vez asignados. Cada entrada apunta al(los) fic - `81fe826` — COUP-02b (= COUP-03): `Surface` usa `Rendering::activeCanvas()` en lloc de `Screen::get()` - `b51109e` — DEAD-01 + DEAD-02 + DEAD-03: esborrats mètodes mort de `Text` - `597402a` — DEAD-04/05/07/08/10 + PATCH-04: neteja mort a `Sprite`/`AnimatedSprite`/`Surface` + `Sprite::update` inline -- `` — DEAD-09: esborrats structs d'extensions GIF no usats +- `ce3b6da` — DEAD-09: esborrats structs d'extensions GIF no usats +- `` — HC-06 + HC-07 + HC-09 + PATCH-08: constants nominals a `render_info` (segments, shadow offset, position count) i dedup init diff --git a/source/core/input/global_inputs.cpp b/source/core/input/global_inputs.cpp index a365b90..315ac00 100644 --- a/source/core/input/global_inputs.cpp +++ b/source/core/input/global_inputs.cpp @@ -139,7 +139,7 @@ namespace GlobalInputs { } void onCycleRenderInfo() { - const int NEXT = (static_cast(Options::video.render_info_position) + 1) % 3; + const int NEXT = (static_cast(Options::video.render_info_position) + 1) % Defaults::RENDER_INFO_POSITION_COUNT; Options::video.render_info_position = static_cast(NEXT); Options::saveToFile(); } diff --git a/source/core/rendering/render_info.cpp b/source/core/rendering/render_info.cpp index ab5ef75..738f39f 100644 --- a/source/core/rendering/render_info.cpp +++ b/source/core/rendering/render_info.cpp @@ -21,8 +21,14 @@ namespace { // Evita una fileta d'un sol píxel quan acaba de començar a aparèixer. constexpr float VISIBLE_EPSILON = 0.01F; - // Índex del segment de temps dins de segments_. Si canvia SEGMENT_COUNT - // o l'ordre, actualitzar ací. + // Desplaçament en píxels de la ombra respecte del text principal. + constexpr int SHADOW_OFFSET_PX = 1; + + // Índex de cada segment dins de segments_. Si canvia SEGMENT_COUNT o + // l'ordre, actualitzar ací. + constexpr int FPS_SEGMENT = 0; + constexpr int DRIVER_SEGMENT = 1; + constexpr int SHADER_SEGMENT = 2; constexpr int TIME_SEGMENT = 3; auto prettify(std::string s) -> std::string { @@ -55,10 +61,11 @@ void RenderInfo::init(const Frame& initial) { text_ = std::make_unique(font_surface, "data/font/8bithud.fnt"); current_ = initial; - segments_[TIME_SEGMENT].mono_digits = true; // Restaura l'estat guardat: si l'overlay estava engegat, l'activem ja - // plenament visible (sense animació d'entrada inicial). + // plenament visible (sense animació d'entrada inicial). refreshSegments + // és qui marca mono_digits al segment de temps; si no s'engega ara, + // la primera crida a update() també ho farà abans de qualsevol render. if (initial.target_position != Defaults::RenderInfoPosition::OFF) { visible_pos_ = initial.target_position; info_anim_ = 1.0F; @@ -111,35 +118,35 @@ void RenderInfo::update(int delta_ms, const Frame& frame) { } void RenderInfo::refreshSegments() { - // [0] FPS (sempre visible mentre l'overlay apareix) - segments_[0].text = std::to_string(Screen::get().getLastFPS()) + " fps"; - segments_[0].visible = true; - segments_[0].mono_digits = false; + // FPS (sempre visible mentre l'overlay apareix) + segments_[FPS_SEGMENT].text = std::to_string(Screen::get().getLastFPS()) + " fps"; + segments_[FPS_SEGMENT].visible = true; + segments_[FPS_SEGMENT].mono_digits = false; - // [1] Driver GPU (sempre visible) + // Driver GPU (sempre visible) const auto& driver = Screen::get().getGPUDriver(); - segments_[1].text = std::string(" | ") + (driver.empty() ? std::string("sdl") : driver); - segments_[1].visible = true; - segments_[1].mono_digits = false; + segments_[DRIVER_SEGMENT].text = std::string(" | ") + (driver.empty() ? std::string("sdl") : driver); + segments_[DRIVER_SEGMENT].visible = true; + segments_[DRIVER_SEGMENT].mono_digits = false; - // [2] Shader + preset (només amb shader activat). El caller ha triat el + // Shader + preset (només amb shader activat). El caller ha triat el // preset actiu segons el shader; ací només el formatem. if (current_.shader_enabled) { - segments_[2].text = " | " + current_.shader_name + " " + prettify(current_.shader_preset); + segments_[SHADER_SEGMENT].text = " | " + current_.shader_name + " " + prettify(current_.shader_preset); } - segments_[2].visible = current_.shader_enabled; - segments_[2].mono_digits = false; + segments_[SHADER_SEGMENT].visible = current_.shader_enabled; + segments_[SHADER_SEGMENT].mono_digits = false; - // [3] Temps de joc (togglejable i persistent) + // Temps de joc (togglejable i persistent) segments_[TIME_SEGMENT].text = " | " + formatTime(elapsed_ms_); segments_[TIME_SEGMENT].visible = current_.show_time; segments_[TIME_SEGMENT].mono_digits = true; // Els tres primers segments baixem a minúscules per coherència estètica - // amb la resta de la línia; el [3] (temps) manté dígits i puntuació. - segments_[0].text = prettify(segments_[0].text); - segments_[1].text = prettify(segments_[1].text); - segments_[2].text = prettify(segments_[2].text); + // amb la resta de la línia; el de temps manté dígits i puntuació. + segments_[FPS_SEGMENT].text = prettify(segments_[FPS_SEGMENT].text); + segments_[DRIVER_SEGMENT].text = prettify(segments_[DRIVER_SEGMENT].text); + segments_[SHADER_SEGMENT].text = prettify(segments_[SHADER_SEGMENT].text); } auto RenderInfo::segmentWidth(const Segment& seg, int digit_cell_w) const -> int { @@ -188,10 +195,10 @@ void RenderInfo::render() { const int SEG_W = segmentWidth(seg, DIGIT_CELL); if (seg.mono_digits) { - text_->writeMonoDigits(XI + 1, Y + 1, seg.text, current_.shadow_color, DIGIT_CELL); + text_->writeMonoDigits(XI + SHADOW_OFFSET_PX, Y + SHADOW_OFFSET_PX, seg.text, current_.shadow_color, DIGIT_CELL); text_->writeMonoDigits(XI, Y, seg.text, current_.text_color, DIGIT_CELL); } else { - text_->writeColored(XI + 1, Y + 1, seg.text, current_.shadow_color); + text_->writeColored(XI + SHADOW_OFFSET_PX, Y + SHADOW_OFFSET_PX, seg.text, current_.shadow_color); text_->writeColored(XI, Y, seg.text, current_.text_color); } diff --git a/source/utils/defaults.hpp b/source/utils/defaults.hpp index e2939e1..6211af6 100644 --- a/source/utils/defaults.hpp +++ b/source/utils/defaults.hpp @@ -30,6 +30,7 @@ namespace Defaults { TOP = 1, BOTTOM = 2, }; + constexpr int RENDER_INFO_POSITION_COUNT = 3; namespace Window { constexpr int ZOOM = 3;