// 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 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). #pragma once #include #include "core/rendering/render_context.hpp" namespace Rendering { // 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). // 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}); // 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; } // namespace Rendering