63 lines
2.7 KiB
C++
63 lines
2.7 KiB
C++
// 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 <SDL3/SDL.h>
|
||
|
||
#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
|