Kohi Game Engine
light_system.h
Go to the documentation of this file.
1 
12 #pragma once
13 
14 #include <defines.h>
15 #include <math/math_types.h>
16 
17 #include "core/engine.h"
18 #include "core/frame_data.h"
19 #include "core_resource_types.h"
21 #include "utils/kcolour.h"
22 
23 #define KRENDERBUFFER_NAME_LIGHTING_GLOBAL "Kohi.StorageBuffer.LightingGlobal"
24 
25 typedef struct klight_attenuation {
30 
31 typedef enum klight_type {
36 
37 typedef struct klight_data {
40  union {
43  };
46 
47 typedef u8 klight;
48 #define KLIGHT_INVALID INVALID_ID_U8
49 
50 typedef struct klight_render_data {
54 
55 typedef struct kdirectional_light_data {
59 
60 // NOTE: If the size of this changes, then klight will need to be a u16 AND the material renderer packed indices
61 // will have to be upgraded to u16s, effectively doubling the memory requirement for indices in immediates.
62 #define MAX_GLOBAL_SSBO_LIGHTS 256
63 
64 // Used as either point or directional light data.
65 typedef struct light_shader_data {
71 
72  union {
78 
84  };
86 
87 // The large structure of data that lives in the SSBO. This is also
88 // used to manage the light system itself.
89 typedef struct light_global_ssbo_data {
92 
93 typedef struct light_system_state {
95 
98 
109 b8 light_system_initialize(u64* memory_requirement, light_system_state* memory, void* config);
110 
117 
119 
120 KAPI klight point_light_create(light_system_state* state, vec3 position, colour3 colour, f32 constant_f, f32 linear, f32 quadratic);
122 
127 
132 
134 
u32 ktransform
Definition: core_resource_types.h:6
This file contains global type definitions which are used throughout the entire engine and applicatio...
#define KAPI
Import/export qualifier.
Definition: defines.h:209
_Bool b8
8-bit boolean type
Definition: defines.h:60
float f32
32-bit floating point number
Definition: defines.h:49
unsigned long long u64
Unsigned 64-bit integer.
Definition: defines.h:30
unsigned char u8
Unsigned 8-bit integer.
Definition: defines.h:21
This file contains structures and logic pertaining to the overall engine itself. The engine is respon...
KAPI colour3 point_light_get_colour(light_system_state *state, klight light)
struct klight_attenuation klight_attenuation
KAPI void point_light_set_position(light_system_state *state, klight light, vec3 position)
struct light_shader_data light_shader_data
KAPI vec3 directional_light_get_direction(light_system_state *state, klight light)
KAPI void directional_light_set_direction(light_system_state *state, klight light, vec3 direction)
KAPI f32 point_light_radius_get(light_system_state *state, klight light)
KAPI colour3 directional_light_get_colour(light_system_state *state, klight light)
struct kdirectional_light_data kdirectional_light_data
KAPI klight_data light_get_data(light_system_state *state, klight light)
#define MAX_GLOBAL_SSBO_LIGHTS
Definition: light_system.h:62
void light_system_frame_prepare(light_system_state *state, frame_data *p_frame_data)
void light_system_shutdown(light_system_state *state)
Shuts down the light system, releasing all resources.
klight_type
Definition: light_system.h:31
@ KLIGHT_TYPE_UNDEFINED
Definition: light_system.h:32
@ KLIGHT_TYPE_DIRECTIONAL
Definition: light_system.h:34
@ KLIGHT_TYPE_POINT
Definition: light_system.h:33
b8 light_system_initialize(u64 *memory_requirement, light_system_state *memory, void *config)
Initializes the light system. As with most systems, this should be called twice, the first time to ob...
struct light_global_ssbo_data light_global_ssbo_data
struct klight_render_data klight_render_data
struct klight_data klight_data
KAPI void light_destroy(light_system_state *state, klight light)
KAPI vec3 point_light_get_position(light_system_state *state, klight light)
KAPI klight point_light_create(light_system_state *state, vec3 position, colour3 colour, f32 constant_f, f32 linear, f32 quadratic)
KAPI void point_light_set_colour(light_system_state *state, klight light, colour3 colour)
u8 klight
Definition: light_system.h:47
KAPI klight directional_light_create(light_system_state *state, vec3 direction, colour3 colour)
struct light_system_state light_system_state
Contains various math types required for the engine.
u16 krenderbuffer
Definition: renderer_types.h:175
Engine-level current frame-specific data.
Definition: frame_data.h:15
Definition: light_system.h:55
klight light
Definition: light_system.h:56
vec3 direction
Definition: light_system.h:57
Definition: light_system.h:25
f32 constant_f
Definition: light_system.h:26
f32 quadratic
Definition: light_system.h:28
f32 linear
Definition: light_system.h:27
Definition: light_system.h:37
vec3 position
Definition: light_system.h:41
klight_type type
Definition: light_system.h:38
colour3 colour
Definition: light_system.h:39
vec3 direction
Definition: light_system.h:42
klight_attenuation attenuation
Definition: light_system.h:44
Definition: light_system.h:50
klight light
Definition: light_system.h:51
ktransform transform
Definition: light_system.h:52
Definition: light_system.h:89
light_shader_data lights[MAX_GLOBAL_SSBO_LIGHTS]
Definition: light_system.h:90
Definition: light_system.h:65
vec4 position
Definition: light_system.h:77
vec4 colour
Definition: light_system.h:70
vec4 direction
Definition: light_system.h:83
Definition: light_system.h:93
klight_data * lights
Definition: light_system.h:96
krenderbuffer lighting_global_ssbo
Definition: light_system.h:94
A 3-element vector.
Definition: math_types.h:117
A 4-element vector.
Definition: math_types.h:229