$darkmode
Suckless OGL 1.0.0
A lean, high-performance C11 PBR Renderer
shockwave.h
Go to the documentation of this file.
1 
12 #ifndef SHOCKWAVE_H
13 #define SHOCKWAVE_H
14 
15 #include "gl_common.h"
16 #include <cglm/types.h>
17 #include <stdbool.h>
18 
19 typedef struct Shader Shader;
20 
22 enum { SHOCKWAVE_MAX_ACTIVE = 16 };
23 
25 static const float SHOCKWAVE_DURATION = 1.2F * 3.0F;
26 
28 static const float SHOCKWAVE_MAX_RADIUS = 6.0F;
29 
32 static const float SHOCKWAVE_MIN_VELOCITY = 0.05F;
33 
35 static const float SHOCKWAVE_HDR_INTENSITY = 4.0F;
36 
41 typedef struct {
42  vec3 position;
43  float start_time;
44  vec3 color;
45  float intensity;
47 
52 typedef struct {
54  int count;
57  GLuint vao;
58  GLuint vbo;
60  /* Grab pass: copy of scene color before shockwave draw so the
61  * fragment shader can read scene pixels without read/write hazard. */
62  GLuint grab_tex;
63  int grab_width;
65  GLuint scene_color_tex;
68 
74 
79 
91 void shockwave_emit(ShockwaveRenderer* renderer, const vec3 position,
92  const vec3 color, float velocity, float sim_time);
93 
97 void shockwave_update(ShockwaveRenderer* renderer, float sim_time);
98 
116 void shockwave_draw(const ShockwaveRenderer* renderer, mat4 view, mat4 proj,
117  vec3 camera_pos, float sim_time, int screen_w,
118  int screen_h);
119 
120 #endif /* SHOCKWAVE_H */
Common OpenGL definitions, RAII helpers, and utilities.
static const float SHOCKWAVE_DURATION
Definition: shockwave.h:25
@ SHOCKWAVE_MAX_ACTIVE
Definition: shockwave.h:22
void shockwave_emit(ShockwaveRenderer *renderer, const vec3 position, const vec3 color, float velocity, float sim_time)
Registers a new shockwave at the given position.
Definition: shockwave.c:77
static const float SHOCKWAVE_MAX_RADIUS
Definition: shockwave.h:28
static const float SHOCKWAVE_MIN_VELOCITY
Definition: shockwave.h:32
void shockwave_renderer_cleanup(ShockwaveRenderer *renderer)
Releases all GPU resources.
Definition: shockwave.c:59
static const float SHOCKWAVE_HDR_INTENSITY
Definition: shockwave.h:35
void shockwave_update(ShockwaveRenderer *renderer, float sim_time)
Removes expired shockwaves based on current simulation time.
Definition: shockwave.c:112
bool shockwave_renderer_init(ShockwaveRenderer *renderer)
Initializes shockwave renderer (shader + GPU resources).
Definition: shockwave.c:26
void shockwave_draw(const ShockwaveRenderer *renderer, mat4 view, mat4 proj, vec3 camera_pos, float sim_time, int screen_w, int screen_h)
Draws all active shockwaves as billboard quads with lensing.
Definition: shockwave.c:162
Wrapper for an OpenGL program with uniform caching and automatic cleanup.
Definition: shader.h:71
One active shockwave expanding from an impact point.
Definition: shockwave.h:41
vec3 position
Definition: shockwave.h:42
float intensity
Definition: shockwave.h:45
float start_time
Definition: shockwave.h:43
vec3 color
Definition: shockwave.h:44
Manages and renders active shockwave effects.
Definition: shockwave.h:52
GLuint vao
Definition: shockwave.h:57
GLuint scene_color_tex
Definition: shockwave.h:65
GLuint grab_tex
Definition: shockwave.h:62
int count
Definition: shockwave.h:54
int grab_width
Definition: shockwave.h:63
GLuint vbo
Definition: shockwave.h:58
int grab_height
Definition: shockwave.h:64
Shader * shader
Definition: shockwave.h:56