From b93761eb1eb9c4ef296f56db7086999eeabeecb0 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Tue, 26 May 2026 19:23:29 +0200 Subject: [PATCH] refactor(render): eliminar restes del ColorOscillator (setLineColor/getLineColor/global mutable) i deixar DEFAULT_LINE_COLOR constexpr --- source/core/defaults/hud.hpp | 4 ++-- source/core/defaults/palette.hpp | 4 ++-- source/core/graphics/border.cpp | 8 ++++---- source/core/graphics/vector_text.hpp | 4 ++-- source/core/graphics/wireframe3d.hpp | 2 +- source/core/rendering/line_renderer.cpp | 13 ++----------- source/core/rendering/line_renderer.hpp | 20 +++++++++++--------- 7 files changed, 24 insertions(+), 31 deletions(-) diff --git a/source/core/defaults/hud.hpp b/source/core/defaults/hud.hpp index 5ead158..4cc4fb3 100644 --- a/source/core/defaults/hud.hpp +++ b/source/core/defaults/hud.hpp @@ -14,8 +14,8 @@ namespace Defaults::Hud { // Colors per segment del marcador. Jerarquia per funció (score/vides/nivell) // + diferenciació de jugador (P1 blanc vs P2 rosa) sense xocar amb els - // colors d'enemics (cyan/roig). Si alpha=255 desactiva l'oscil·lador global - // i mostra el color estable (en lloc del pulse verd genèric). + // colors d'enemics (cyan/roig). Amb alpha=255 el line_renderer usa el color + // directament sense caure al fallback verd (Rendering::DEFAULT_LINE_COLOR). namespace Colors { constexpr SDL_Color SCORE_P1 = {.r = 255, .g = 255, .b = 255, .a = 255}; // blanc constexpr SDL_Color SCORE_P2 = {.r = 255, .g = 130, .b = 200, .a = 255}; // rosa magenta diff --git a/source/core/defaults/palette.hpp b/source/core/defaults/palette.hpp index 4b2217a..bf58374 100644 --- a/source/core/defaults/palette.hpp +++ b/source/core/defaults/palette.hpp @@ -6,8 +6,8 @@ #include // Paleta semántica por tipo de entidad. Si una entity declara color, lo -// pasa al pipeline con alpha=255 (sentinela "color válido"); si no, se -// usa el color global del oscilador (g_current_line_color). +// pasa al pipeline con alpha=255 (sentinela "color válido"); si no, +// line_renderer::linea() cau a DEFAULT_LINE_COLOR (verd fòsfor fallback). namespace Defaults::Palette { // Paleta neon: pujada lleugera dels canals secundaris per millorar la diff --git a/source/core/graphics/border.cpp b/source/core/graphics/border.cpp index ccc7f08..084ac36 100644 --- a/source/core/graphics/border.cpp +++ b/source/core/graphics/border.cpp @@ -51,12 +51,12 @@ namespace Graphics { namespace { - // Lerp de l'oscil·lador (color base actual) cap a un color "flash" en - // funció de f ∈ [0, 1]. Retorna sempre amb alpha>0 perquè el line_renderer - // l'use directament (sense barrejar amb el global). + // Lerp del color base verd fòsfor cap a un color "flash" en funció de + // f ∈ [0, 1]. Retorna sempre amb alpha>0 perquè el line_renderer l'usi + // directament (sense caure al fallback DEFAULT_LINE_COLOR). auto lerpColor(SDL_Color flash, float f) -> SDL_Color { const float CLAMPED = std::clamp(f, 0.0F, 1.0F); - const SDL_Color BASE = Rendering::getLineColor(); + constexpr SDL_Color BASE = Rendering::DEFAULT_LINE_COLOR; const auto LERP_U8 = [&](unsigned char a, unsigned char b) { const float OUT = (static_cast(a) * (1.0F - CLAMPED)) + (static_cast(b) * CLAMPED); return static_cast(OUT); diff --git a/source/core/graphics/vector_text.hpp b/source/core/graphics/vector_text.hpp index 137cade..7db6dff 100644 --- a/source/core/graphics/vector_text.hpp +++ b/source/core/graphics/vector_text.hpp @@ -26,7 +26,7 @@ namespace Graphics { // - scale: factor de scale (1.0 = 20×40 px por carácter) // - spacing: espacio entre caracteres en píxeles (a scale 1.0) // - brightness: factor de brightness (0.0-1.0, default 1.0 = màxima brightness) - // - color: color RGBA explícit; si alpha==0 (default) s'usa l'oscil·lador global + // - color: color RGBA explícit; si alpha==0 (default) es fa fallback a Rendering::DEFAULT_LINE_COLOR void render(const std::string& text, const Vec2& position, float scale = 1.0F, float spacing = 2.0F, float brightness = 1.0F, SDL_Color color = {0, 0, 0, 0}) const; // Renderizar string centrado en un punto @@ -35,7 +35,7 @@ namespace Graphics { // - scale: factor de scale (1.0 = 20×40 px por carácter) // - spacing: espacio entre caracteres en píxeles (a scale 1.0) // - brightness: factor de brightness (0.0-1.0, default 1.0 = màxima brightness) - // - color: color RGBA explícit; si alpha==0 (default) s'usa l'oscil·lador global + // - color: color RGBA explícit; si alpha==0 (default) es fa fallback a Rendering::DEFAULT_LINE_COLOR void renderCentered(const std::string& text, const Vec2& centre_point, float scale = 1.0F, float spacing = 2.0F, float brightness = 1.0F, SDL_Color color = {0, 0, 0, 0}) const; // Calcular ancho total de un string (útil para centrado). diff --git a/source/core/graphics/wireframe3d.hpp b/source/core/graphics/wireframe3d.hpp index a57d9dd..58e838d 100644 --- a/source/core/graphics/wireframe3d.hpp +++ b/source/core/graphics/wireframe3d.hpp @@ -4,7 +4,7 @@ // Mesh3D = llista de vèrtexs Vec3 + llista d'arestes (parells d'índexs). // drawWireframe() aplica una Transform3D al mesh, projecta amb Camera3D i // emet cada aresta com una línia 2D pel pipeline `Rendering::linea` (mateix -// pipeline que la resta del joc: glow verd via ColorOscillator si color.a==0). +// pipeline que la resta del joc: verd fòsfor via Rendering::DEFAULT_LINE_COLOR si color.a==0). // // Sense depth buffer: el caller és responsable d'ordenar els meshos per // profunditat decreixent si vol oclusió coherent (la pipeline és LINE_LIST diff --git a/source/core/rendering/line_renderer.cpp b/source/core/rendering/line_renderer.cpp index 8710865..144c951 100644 --- a/source/core/rendering/line_renderer.cpp +++ b/source/core/rendering/line_renderer.cpp @@ -8,11 +8,6 @@ namespace Rendering { - // Color global compartido para líneas sin paleta propia (HUD, debug, texto - // genérico). Equivale al "color máximo" de la antigua oscilación CPU: verde - // fósforo CRT. El pulso de brillo lo aplica ahora el shader de postpro. - SDL_Color g_current_line_color = {100, 255, 100, 255}; - // Grosor global por defecto. Configurable via setLineThickness. float g_current_line_thickness = Defaults::Rendering::LINE_THICKNESS_DEFAULT; @@ -36,8 +31,8 @@ namespace Rendering { const auto FX2 = static_cast(x2); const auto FY2 = static_cast(y2); - // color.alpha==0 → usar color global (verde fósforo). alpha>0 → color directo. - const SDL_Color SOURCE = (color.a > 0) ? color : g_current_line_color; + // color.alpha==0 → fallback a DEFAULT_LINE_COLOR (verd fòsfor). alpha>0 → color directo. + const SDL_Color SOURCE = (color.a > 0) ? color : DEFAULT_LINE_COLOR; const float R = (static_cast(SOURCE.r) * brightness) / 255.0F; const float G = (static_cast(SOURCE.g) * brightness) / 255.0F; const float B = (static_cast(SOURCE.b) * brightness) / 255.0F; @@ -68,10 +63,6 @@ namespace Rendering { } } - void setLineColor(SDL_Color color) { g_current_line_color = color; } - - auto getLineColor() -> SDL_Color { return g_current_line_color; } - void setLineThickness(float thickness) { if (thickness > 0.0F) { g_current_line_thickness = thickness; diff --git a/source/core/rendering/line_renderer.hpp b/source/core/rendering/line_renderer.hpp index 69af0d5..c7b6e80 100644 --- a/source/core/rendering/line_renderer.hpp +++ b/source/core/rendering/line_renderer.hpp @@ -3,9 +3,10 @@ // // El dibujo de líneas pasa por el pipeline GPU. Las coordenadas (x1,y1,x2,y2) // son lógicas (1280×720); el shader las mapea a NDC y el viewport del SDLManager -// hace el letterbox a píxeles físicos. El brillo modula el color global de -// línea (lo gestiona ColorOscillator). El grosor es configurable por línea -// (parámetro thickness>0) o global (g_current_line_thickness vía setLineThickness). +// hace el letterbox a píxeles físicos. El pulse de brillo lo aplica el shader +// de postpro (ya no hi ha un ColorOscillator a CPU). El grosor es configurable +// per línia (parámetro thickness>0) o global (g_current_line_thickness vía +// setLineThickness). #pragma once @@ -15,12 +16,17 @@ namespace Rendering { + // Color verd fòsfor CRT per defecte: s'usa quan el caller passa color amb + // alpha==0 (sentinella "sense color propi"). Constant immutable: la + // semàntica de "color global" ja no existeix (era de l'antic ColorOscillator). + constexpr SDL_Color DEFAULT_LINE_COLOR = {.r = 100, .g = 255, .b = 100, .a = 255}; + // Dibuja una línea entre dos puntos en coordenadas lógicas (1280×720). // brightness: factor de brillo (0.0..1.0, default 1.0 = brillo máximo). // Pre-multiplica el RGB del color (color dim sobre fons negre). // thickness: grosor en píxeles lógicos. Si <= 0 usa g_current_line_thickness. - // color: si alpha==0, se usa el color global del oscilador; si alpha>0 se - // usa este color directo (paleta semántica por entidad). + // color: si alpha==0, se usa DEFAULT_LINE_COLOR (verd fòsfor fallback); + // si alpha>0 se usa este color directo (paleta semántica por entidad). // alpha: alpha que arriba al GPU (default 1.0 = opac, behavior original). // Valors <1.0 fan que la línia es barregi de veritat sobre el dest // en comptes de sobrepintar-lo (útil per halos translúcids). @@ -49,10 +55,6 @@ namespace Rendering { SDL_Color color = {0, 0, 0, 0}, SDL_Color glow_color = {0, 0, 0, 0}); - // Color global de las líneas (lo actualiza ColorOscillator vía SDLManager). - void setLineColor(SDL_Color color); - [[nodiscard]] auto getLineColor() -> SDL_Color; - // Grosor global por defecto (en píxeles lógicos). Default: 1.5. void setLineThickness(float thickness); [[nodiscard]] auto getLineThickness() -> float;