Orange/src/Orange/Render/Shaders/vs_Mesh.vert

55 lines
1.1 KiB
GLSL
Raw Normal View History

2022-08-12 20:08:28 +01:00
#version 450
2022-08-20 00:53:01 +01:00
#extension GL_EXT_scalar_block_layout : require
#extension GL_ARB_shader_draw_parameters : require
2022-08-12 20:08:28 +01:00
2022-08-13 22:15:23 +01:00
struct UniformData
{
2022-08-12 21:18:11 +01:00
mat4 projection;
mat4 view;
2022-08-13 22:15:23 +01:00
};
2022-08-20 00:53:01 +01:00
struct Renderable
{
mat4 world;
uint meshIdx;
vec3 color;
};
struct Renderables
{
Renderable renderables[1024];
};
2022-08-13 22:15:23 +01:00
layout(push_constant) uniform p_constants_t
{
uint frame;
} p_constants;
2022-08-20 00:53:01 +01:00
layout(binding = 0) uniform u_frame_data_t
2022-08-13 22:15:23 +01:00
{
UniformData frame[4];
2022-08-20 00:53:01 +01:00
} u_frame_data;
layout(scalar, binding = 2) uniform u_renderable_t
{
Renderables frame[4];
} u_renderable;
2022-08-12 20:08:28 +01:00
2022-08-13 22:15:23 +01:00
2022-08-12 21:18:11 +01:00
layout(location = 0) in vec3 i_pos;
layout(location = 1) in vec2 i_uv;
layout(location = 2) in vec3 i_normal;
2022-08-12 20:08:28 +01:00
2022-08-20 00:53:01 +01:00
layout(location = 0) out flat uint o_meshIdx;
2022-08-13 21:41:19 +01:00
layout(location = 1) out vec2 o_uv;
2022-08-12 20:08:28 +01:00
void main()
{
2022-08-13 22:15:23 +01:00
gl_Position =
2022-08-20 00:53:01 +01:00
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 *
2022-08-13 22:15:23 +01:00
vec4(i_pos, 1.0);
2022-08-20 00:53:01 +01:00
o_meshIdx = u_renderable.frame[p_constants.frame].renderables[gl_DrawIDARB].meshIdx;
2022-08-13 21:41:19 +01:00
o_uv = i_uv;
2022-08-12 20:08:28 +01:00
}