55 lines
1.1 KiB
GLSL
55 lines
1.1 KiB
GLSL
#version 450
|
|
#extension GL_EXT_scalar_block_layout : require
|
|
#extension GL_ARB_shader_draw_parameters : require
|
|
|
|
struct UniformData
|
|
{
|
|
mat4 projection;
|
|
mat4 view;
|
|
};
|
|
|
|
struct Renderable
|
|
{
|
|
mat4 world;
|
|
uint meshIdx;
|
|
vec3 color;
|
|
};
|
|
|
|
struct Renderables
|
|
{
|
|
Renderable renderables[1024];
|
|
};
|
|
|
|
layout(push_constant) uniform p_constants_t
|
|
{
|
|
uint frame;
|
|
} p_constants;
|
|
|
|
layout(binding = 0) uniform u_frame_data_t
|
|
{
|
|
UniformData frame[4];
|
|
} u_frame_data;
|
|
|
|
layout(scalar, binding = 2) uniform u_renderable_t
|
|
{
|
|
Renderables frame[4];
|
|
} u_renderable;
|
|
|
|
|
|
layout(location = 0) in vec3 i_pos;
|
|
layout(location = 1) in vec2 i_uv;
|
|
layout(location = 2) in vec3 i_normal;
|
|
|
|
layout(location = 0) out flat uint o_meshIdx;
|
|
layout(location = 1) out vec2 o_uv;
|
|
|
|
void main()
|
|
{
|
|
gl_Position =
|
|
u_frame_data.frame[p_constants.frame].projection *
|
|
u_frame_data.frame[p_constants.frame].view *
|
|
u_renderable.frame[p_constants.frame].renderables[gl_DrawIDARB].world *
|
|
vec4(i_pos, 1.0);
|
|
o_meshIdx = u_renderable.frame[p_constants.frame].renderables[gl_DrawIDARB].meshIdx;
|
|
o_uv = i_uv;
|
|
} |