Suckless OGL 1.0.0
A lean, high-performance C11 PBR Renderer
Loading...
Searching...
No Matches
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
21typedef struct Shader Shader;
22
24enum { TRAIL_MAX_POINTS = 256 };
25
27static const float TRAIL_HDR_INTENSITY = 5.0F;
28
30static const float TRAIL_MAX_WIDTH = 0.24F;
31
33static const float TRAIL_SAMPLE_INTERVAL = 1.0F / 60.0F;
34
36static const float TRAIL_DURATION_DEFAULT = 4.0F;
37
39static const float TRAIL_DURATION_MIN = 0.5F;
40static const float TRAIL_DURATION_MAX = 30.0F;
41static const float TRAIL_DURATION_STEP = 0.5F;
42
49typedef struct {
50 float position[3];
51 float u;
52 float color[3];
53 float v;
55
60typedef struct {
61 vec3 points[TRAIL_MAX_POINTS];
62 float timestamps[TRAIL_MAX_POINTS];
64 int head;
65 int count;
66} TrailRing;
67
78
83typedef struct {
84 float intensity;
85 float core_exp;
86 float width;
89
91static const float TRAIL_NEON_INTENSITY_DEFAULT = 5.0F;
92static const float TRAIL_NEON_CORE_EXP_DEFAULT = 12.0F;
93static const float TRAIL_NEON_WIDTH_DEFAULT = 0.24F;
94static const float TRAIL_NEON_INTENSITY_STEP = 0.5F;
95static const float TRAIL_NEON_CORE_STEP = 2.0F;
96static const float TRAIL_NEON_WIDTH_STEP = 0.02F;
97static const float TRAIL_NEON_INTENSITY_MIN = 0.5F;
98static const float TRAIL_NEON_CORE_MIN = 2.0F;
99static const float TRAIL_NEON_WIDTH_MIN = 0.04F;
100
105typedef struct {
110 float sim_time;
113 /* GPU Resources */
114 GLuint vao;
115 GLuint vbo;
119 /* Per-body trail colors (HDR emissive). */
120 vec3 colors[NBODY_MAX_BODIES];
121
122 /* Runtime neon glow parameters */
125
132bool trail_renderer_init(TrailRenderer* tr, int body_count);
133
140void trail_renderer_set_color(TrailRenderer* tr, int body_index,
141 const vec3 color);
142
151void trail_renderer_record(TrailRenderer* tr, const NBodySim* sim,
152 float delta_time);
153
158
162void trail_renderer_set_duration(TrailRenderer* tr, float duration);
163
174void trail_renderer_draw(TrailRenderer* tr, mat4 view, mat4 proj, vec3 cam_pos);
175
181
187
188#endif /* TRAIL_RENDERER_H */
Common OpenGL definitions, RAII helpers, and utilities.
N-body gravitational simulation (Velocity Verlet + Plummer softening).
@ NBODY_MAX_BODIES
Definition nbody_types.h:8
State container for the N-body simulation.
Definition nbody_types.h:68
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:123
float trail_duration
Definition trail_renderer.h:111
int body_count
Definition trail_renderer.h:108
GLuint vao
Definition trail_renderer.h:114
Shader * shader
Definition trail_renderer.h:116
TrailVertex * staging
Definition trail_renderer.h:107
float sample_timer
Definition trail_renderer.h:109
float sim_time
Definition trail_renderer.h:110
int vertex_count
Definition trail_renderer.h:117
GLuint vbo
Definition trail_renderer.h:115
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:382
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:123
static const float TRAIL_NEON_INTENSITY_DEFAULT
Definition trail_renderer.h:91
static const float TRAIL_MAX_WIDTH
Definition trail_renderer.h:30
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:59
void trail_renderer_clear(TrailRenderer *tr)
Clears all recorded trail data (e.g., on simulation reset).
Definition trail_renderer.c:147
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:131
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:160
@ TRAIL_MAX_POINTS
Definition trail_renderer.h:24
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:387
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:295