refactor(core/rendering): nomenar constants a RenderInfo (HC-06/-07/-09 + PATCH-08)

render_info.cpp tenia diverses "cifres soltes" amb significat
estructural:
- Índex 0/1/2/3 dins segments_ per a FPS/driver/shader/temps — ara
  FPS_SEGMENT, DRIVER_SEGMENT, SHADER_SEGMENT, TIME_SEGMENT (HC-06).
- +1,+1 per a la ombra del text — ara SHADOW_OFFSET_PX (HC-09).
- % 3 al cicle de posicions de global_inputs.cpp — ara
  Defaults::RENDER_INFO_POSITION_COUNT (HC-07).

A més, init() assignava mono_digits=true al segment de temps que
refreshSegments() ja marca a cada crida, inclosa la primera d'update()
abans de render. S'elimina el doblegat (PATCH-08); el comentari
explica la garantia.

Build + smoke 5s xvfb OK (exit 124).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
JailDesignerandClaude Opus 4.7 committed 2026-04-20 09:47:49 +02:00
1 parent ce3b6da617
commit bbb397abb2
4 files changed
+38 -29

No files matched your search

+6 -5
View File
@@ -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
- `<pendent>` — DEAD-09: esborrats structs d'extensions GIF no usats
- `ce3b6da` — DEAD-09: esborrats structs d'extensions GIF no usats
- `<pendent>` — HC-06 + HC-07 + HC-09 + PATCH-08: constants nominals a `render_info` (segments, shadow offset, position count) i dedup init
+1 -1
View File
@@ -139,7 +139,7 @@ namespace GlobalInputs {
}
void onCycleRenderInfo() {
const int NEXT = (static_cast<int>(Options::video.render_info_position) + 1) % 3;
const int NEXT = (static_cast<int>(Options::video.render_info_position) + 1) % Defaults::RENDER_INFO_POSITION_COUNT;
Options::video.render_info_position = static_cast<Defaults::RenderInfoPosition>(NEXT);
Options::saveToFile();
}
+30 -23
View File
@@ -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<Text>(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);
}
+1
View File
@@ -30,6 +30,7 @@ namespace Defaults {
TOP = 1,
BOTTOM = 2,
};
constexpr int RENDER_INFO_POSITION_COUNT = 3;
namespace Window {
constexpr int ZOOM = 3;