// line_renderer.hpp - Renderizado de líneas vectoriales (SDL3 GPU) // © 2026 JailDesigner // // 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 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 #include #include "core/rendering/render_context.hpp" 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 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). void linea(Renderer* renderer, int x1, int y1, int x2, int y2, float brightness = 1.0F, float thickness = 0.0F, SDL_Color color = {0, 0, 0, 0}, float alpha = 1.0F); // Versió amb halo neon: dibuixa la línia amb diversos passos de gruix // creixent i alfa decreixent (config a Defaults::FX::Glow::Line::PASSES). // El core (últim pass) usa el thickness/alpha que passa el caller. // glow_color: si alpha>0, els passes de halo usen aquest color en lloc // del color de la línia (p.ex. línia blanca amb halo daurat). void lineaGlow(Renderer* renderer, int x1, int y1, int x2, int y2, float brightness = 1.0F, float thickness = 0.0F, SDL_Color color = {0, 0, 0, 0}, SDL_Color glow_color = {0, 0, 0, 0}); // Grosor global por defecto (en píxeles lógicos). Default: 1.5. void setLineThickness(float thickness); [[nodiscard]] auto getLineThickness() -> float; } // namespace Rendering