2023-06-27 16:01:56 +00:00
|
|
|
struct LightData {
|
|
|
|
vec4 color; // .a is intensity
|
|
|
|
vec4 position; // .w = 0 -> directional, .w = 1 -> point/cone
|
|
|
|
vec4 direction; // .w = -cos(cone_angle/2) (1 for omni/dir)
|
|
|
|
vec4 attenuation;
|
|
|
|
};
|
|
|
|
|
2023-08-01 14:34:08 +00:00
|
|
|
#define ST_NONE 0 // no shadows
|
|
|
|
#define ST_PLANE 1 // single plane shadow map (small spotlight)
|
|
|
|
#define ST_CASCADE 2 // cascaded shadow maps
|
|
|
|
#define ST_CUBE 3 // cubemap (omni, large spotlight)
|
2023-06-27 16:01:56 +00:00
|
|
|
|
2023-08-01 14:34:08 +00:00
|
|
|
struct LightRender {
|
|
|
|
uint id_data;
|
|
|
|
uint style;
|
|
|
|
};
|
|
|
|
|
2023-08-13 09:06:28 +00:00
|
|
|
layout (set = 0, binding = 0) buffer ShadowMatrices {
|
|
|
|
mat4 shadow_mats[];
|
|
|
|
};
|
2023-08-01 14:34:08 +00:00
|
|
|
layout (set = 1, binding = 0) buffer LightIds {
|
|
|
|
uint lightIds[];
|
|
|
|
};
|
|
|
|
layout (set = 1, binding = 1) buffer Lights {
|
|
|
|
LightData lights[];
|
|
|
|
};
|
|
|
|
layout (set = 1, binding = 2) buffer Renderer {
|
|
|
|
LightRender renderer[];
|
|
|
|
};
|
|
|
|
layout (set = 1, binding = 3) buffer Style {
|
|
|
|
vec4 style[];
|
2023-06-27 16:01:56 +00:00
|
|
|
};
|
2023-08-07 08:47:49 +00:00
|
|
|
layout (set = 1, binding = 4) buffer LightEntIds {
|
|
|
|
uint light_entids[];
|
|
|
|
};
|
2023-08-13 17:33:19 +00:00
|
|
|
|
|
|
|
layout (push_constant) uniform PushConstants {
|
|
|
|
vec4 CascadeDepths;
|
|
|
|
uint queue;
|
|
|
|
};
|