#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; }