$darkmode
Suckless OGL 1.0.0
A lean, high-performance C11 PBR Renderer
trail_renderer.h
Go to the documentation of this file.
1 
13 #ifndef TRAIL_RENDERER_H
14 #define TRAIL_RENDERER_H
15 
16 #include "gl_common.h"
17 #include "nbody.h"
18 #include <cglm/types.h>
19 #include <stdbool.h>
20 
21 typedef struct Shader Shader;
22 
24 enum { TRAIL_MAX_POINTS = 256 };
25 
27 static const float TRAIL_HDR_INTENSITY = 5.0F;
28 
30 static const float TRAIL_MAX_WIDTH = 0.24F;
31 
33 static const float TRAIL_SAMPLE_INTERVAL = 1.0F / 60.0F;
34 
36 static const float TRAIL_DURATION_DEFAULT = 4.0F;
37 
39 static const float TRAIL_DURATION_MIN = 0.5F;
40 static const float TRAIL_DURATION_MAX = 30.0F;
41 static const float TRAIL_DURATION_STEP = 0.5F;
42 
49 typedef struct {
50  float position[3];
51  float u;
52  float color[3];
53  float v;
54 } TrailVertex;
55 
60 typedef struct {
61  vec3 points[TRAIL_MAX_POINTS];
62  float timestamps[TRAIL_MAX_POINTS];
64  int head;
65  int count;
66 } TrailRing;
67 
72 typedef enum {
78 
83 typedef struct {
84  float intensity;
85  float core_exp;
86  float width;
89 
91 static const float TRAIL_NEON_INTENSITY_DEFAULT = 5.0F;
92 static const float TRAIL_NEON_CORE_EXP_DEFAULT = 12.0F;
93 static const float TRAIL_NEON_WIDTH_DEFAULT = 0.24F;
94 static const float TRAIL_NEON_INTENSITY_STEP = 0.5F;
95 static const float TRAIL_NEON_CORE_STEP = 2.0F;
96 static const float TRAIL_NEON_WIDTH_STEP = 0.02F;
97 static const float TRAIL_NEON_INTENSITY_MIN = 0.5F;
98 static const float TRAIL_NEON_CORE_MIN = 2.0F;
99 static const float TRAIL_NEON_WIDTH_MIN = 0.04F;
100 
105 typedef struct {
108  float sample_timer;
109  float sim_time;
112  /* GPU Resources */
113  GLuint vao;
114  GLuint vbo;
118  /* Per-body trail colors (HDR emissive). */
119  vec3 colors[NBODY_MAX_BODIES];
120 
121  /* Runtime neon glow parameters */
123 } TrailRenderer;
124 
131 bool trail_renderer_init(TrailRenderer* tr, int body_count);
132 
139 void trail_renderer_set_color(TrailRenderer* tr, int body_index,
140  const vec3 color);
141 
150 void trail_renderer_record(TrailRenderer* tr, const NBodySim* sim,
151  float delta_time);
152 
157 
161 void trail_renderer_set_duration(TrailRenderer* tr, float duration);
162 
173 void trail_renderer_draw(TrailRenderer* tr, mat4 view, mat4 proj, vec3 cam_pos);
174 
180 
186 
187 #endif /* TRAIL_RENDERER_H */
Common OpenGL definitions, RAII helpers, and utilities.
N-body gravitational simulation (Velocity Verlet + Plummer softening).
@ NBODY_MAX_BODIES
Definition: nbody.h:21
State container for the N-body simulation.
Definition: nbody.h:104
Wrapper for an OpenGL program with uniform caching and automatic cleanup.
Definition: shader.h:71
Runtime-adjustable neon glow profile parameters.
Definition: trail_renderer.h:83
float core_exp
Definition: trail_renderer.h:85
TrailNeonParam active
Definition: trail_renderer.h:87
float width
Definition: trail_renderer.h:86
float intensity
Definition: trail_renderer.h:84
Manages trail state and GPU resources for all bodies.
Definition: trail_renderer.h:105
TrailNeonParams neon
Definition: trail_renderer.h:122
float trail_duration
Definition: trail_renderer.h:110
int body_count
Definition: trail_renderer.h:107
GLuint vao
Definition: trail_renderer.h:113
Shader * shader
Definition: trail_renderer.h:115
float sample_timer
Definition: trail_renderer.h:108
float sim_time
Definition: trail_renderer.h:109
int vertex_count
Definition: trail_renderer.h:116
GLuint vbo
Definition: trail_renderer.h:114
Ring buffer of recorded positions for one body.
Definition: trail_renderer.h:60
int count
Definition: trail_renderer.h:65
int head
Definition: trail_renderer.h:64
Per-vertex data for the ribbon triangle strip.
Definition: trail_renderer.h:49
float u
Definition: trail_renderer.h:51
float v
Definition: trail_renderer.h:53
static const float TRAIL_NEON_INTENSITY_STEP
Definition: trail_renderer.h:94
float trail_renderer_get_duration(const TrailRenderer *tr)
Returns the current trail duration in seconds.
Definition: trail_renderer.c:359
static const float TRAIL_NEON_CORE_STEP
Definition: trail_renderer.h:95
static const float TRAIL_HDR_INTENSITY
Definition: trail_renderer.h:27
static const float TRAIL_DURATION_MAX
Definition: trail_renderer.h:40
static const float TRAIL_NEON_CORE_EXP_DEFAULT
Definition: trail_renderer.h:92
void trail_renderer_set_color(TrailRenderer *tr, int body_index, const vec3 color)
Sets the trail color for a specific body.
Definition: trail_renderer.c:106
static const float TRAIL_NEON_INTENSITY_DEFAULT
Definition: trail_renderer.h:91
static const float TRAIL_MAX_WIDTH
Definition: trail_renderer.h:30
@ TRAIL_MAX_POINTS
Definition: trail_renderer.h:24
static const float TRAIL_NEON_WIDTH_STEP
Definition: trail_renderer.h:96
static const float TRAIL_DURATION_STEP
Definition: trail_renderer.h:41
bool trail_renderer_init(TrailRenderer *tr, int body_count)
Initializes trail renderer resources.
Definition: trail_renderer.c:57
void trail_renderer_clear(TrailRenderer *tr)
Clears all recorded trail data (e.g., on simulation reset).
Definition: trail_renderer.c:124
static const float TRAIL_NEON_WIDTH_DEFAULT
Definition: trail_renderer.h:93
void trail_renderer_cleanup(TrailRenderer *tr)
Releases all GPU resources.
Definition: trail_renderer.c:114
static const float TRAIL_DURATION_DEFAULT
Definition: trail_renderer.h:36
void trail_renderer_record(TrailRenderer *tr, const NBodySim *sim, float delta_time)
Records current positions from the simulation.
Definition: trail_renderer.c:137
static const float TRAIL_DURATION_MIN
Definition: trail_renderer.h:39
static const float TRAIL_NEON_CORE_MIN
Definition: trail_renderer.h:98
static const float TRAIL_NEON_WIDTH_MIN
Definition: trail_renderer.h:99
static const float TRAIL_SAMPLE_INTERVAL
Definition: trail_renderer.h:33
void trail_renderer_set_duration(TrailRenderer *tr, float duration)
Sets the trail duration in seconds (clamped to valid range).
Definition: trail_renderer.c:364
static const float TRAIL_NEON_INTENSITY_MIN
Definition: trail_renderer.h:97
TrailNeonParam
Identifies which neon parameter is being adjusted.
Definition: trail_renderer.h:72
@ TRAIL_NEON_PARAM_COUNT
Definition: trail_renderer.h:76
@ TRAIL_NEON_PARAM_WIDTH
Definition: trail_renderer.h:75
@ TRAIL_NEON_PARAM_CORE
Definition: trail_renderer.h:74
@ TRAIL_NEON_PARAM_INTENSITY
Definition: trail_renderer.h:73
void trail_renderer_draw(TrailRenderer *tr, mat4 view, mat4 proj, vec3 cam_pos)
Builds ribbon geometry and renders all trails.
Definition: trail_renderer.c:272