Suckless OGL 1.0.0
A lean, high-performance C11 PBR Renderer
Loading...
Searching...
No Matches
light_probes.h
Go to the documentation of this file.
1#ifndef LIGHT_PROBES_H
2#define LIGHT_PROBES_H
3
4#include "sh_math.h"
5#include <cglm/cglm.h>
6#include <pthread.h>
7#include <stdbool.h>
8
9typedef struct Shader Shader;
10typedef struct SphereInstance SphereInstance;
11
14enum { SH_TEXTURE_COUNT = 7 };
15
18
19typedef struct {
20 SH9 sh_data; /* 9 coefficients, each aligned to vec4 (16 bytes) for
21 std430 */
23
24typedef struct {
25 /* Grid Data */
26 LightProbe* probes; /* CPU Buffer */
27 unsigned int ssbo; /* Legacy GPU Buffer Handle (kept for debug view) */
28 unsigned int sh_textures[SH_TEXTURE_COUNT]; /* 3D Textures for hardware
29 interpolation */
30
31 /* Spatial Info */
34 ivec3 grid_dim;
37
38 /* Scene Copy for Async Update */
41
42 /* Threading */
43 pthread_t worker_thread;
44 pthread_mutex_t mutex;
45 pthread_cond_t cond;
46 volatile bool running;
47 volatile bool update_pending;
48 volatile bool results_ready;
49
50 /* Debug Resources */
53 unsigned int dummy_vao;
54 unsigned int aabb_vao;
55 unsigned int aabb_vbo;
57
67void light_probe_grid_compute_aabb(LightProbeGrid* grid, const void* spheres,
68 int count, size_t stride, float padding);
69
77void light_probe_grid_init_cpu(LightProbeGrid* grid, int dim_x, int dim_y,
78 int dim_z);
79
84void light_probe_grid_init(LightProbeGrid* grid, int dim_x, int dim_y,
85 int dim_z);
86
90void light_probe_grid_set_bounds(LightProbeGrid* grid, vec3 aabb_min,
91 vec3 aabb_max);
92
96void light_probe_grid_set_scene(LightProbeGrid* grid, const void* spheres,
97 int count, size_t stride);
98
103
109
116void light_probe_grid_render_debug(LightProbeGrid* grid, mat4 view, mat4 proj);
117
122
127
128#endif /* LIGHT_PROBES_H */
void light_probe_grid_compute_aabb(LightProbeGrid *grid, const void *spheres, int count, size_t stride, float padding)
Computes the AABB for the grid based on sphere instances.
Definition light_probes.c:90
void light_probe_grid_init(LightProbeGrid *grid, int dim_x, int dim_y, int dim_z)
Initializes the grid structure, creates SSBO, and starts worker thread.
Definition light_probes.c:430
@ TEXTURE_UNIT_SH_START
Definition light_probes.h:17
void light_probe_grid_init_cpu(LightProbeGrid *grid, int dim_x, int dim_y, int dim_z)
Initializes the grid structure (CPU only).
Definition light_probes.c:143
void light_probe_grid_render_debug(LightProbeGrid *grid, mat4 view, mat4 proj)
Renders debug spheres for the probes.
Definition light_probes.c:676
void light_probe_grid_cleanup(LightProbeGrid *grid)
Cleans up all resources (CPU, GPU, Threads).
Definition light_probes.c:626
void light_probe_grid_set_scene(LightProbeGrid *grid, const void *spheres, int count, size_t stride)
Updates the scene data used by the grid (copies it).
Definition light_probes.c:502
void light_probe_grid_sync(LightProbeGrid *grid)
Checks if results are ready and uploads to GPU. Should be called on main thread.
Definition light_probes.c:543
void light_probe_grid_update_async(LightProbeGrid *grid)
Signals the worker thread to perform an SH update.
Definition light_probes.c:530
void light_probe_grid_set_bounds(LightProbeGrid *grid, vec3 aabb_min, vec3 aabb_max)
Sets the grid AABB and computes cell sizes from dimensions.
Definition light_probes.c:479
@ SH_TEXTURE_COUNT
Definition light_probes.h:14
void light_probe_grid_free_cpu(LightProbeGrid *grid)
Cleans up CPU resources.
Definition light_probes.c:169
Definition light_probes.h:24
SphereInstance * scene_copy
Definition light_probes.h:39
pthread_t worker_thread
Definition light_probes.h:43
Shader * aabb_shader
Definition light_probes.h:52
pthread_mutex_t mutex
Definition light_probes.h:44
int scene_count
Definition light_probes.h:40
Shader * debug_shader
Definition light_probes.h:51
int total_probes
Definition light_probes.h:36
volatile bool update_pending
Definition light_probes.h:47
unsigned int aabb_vao
Definition light_probes.h:54
unsigned int aabb_vbo
Definition light_probes.h:55
unsigned int ssbo
Definition light_probes.h:27
ivec3 grid_dim
Definition light_probes.h:34
volatile bool running
Definition light_probes.h:46
unsigned int dummy_vao
Definition light_probes.h:53
pthread_cond_t cond
Definition light_probes.h:45
LightProbe * probes
Definition light_probes.h:26
vec3 aabb_min
Definition light_probes.h:32
volatile bool results_ready
Definition light_probes.h:48
vec3 cell_size
Definition light_probes.h:35
vec3 aabb_max
Definition light_probes.h:33
Definition light_probes.h:19
SH9 sh_data
Definition light_probes.h:20
Definition sh_math.h:10
Wrapper for an OpenGL program with uniform caching and automatic cleanup.
Definition shader.h:71
Per-instance data sent to the shader via an instanced VBO.
Definition sphere_types.h:25