diff options
Diffstat (limited to 'glsl/shader_2d_wired.vert.glsl')
-rw-r--r-- | glsl/shader_2d_wired.vert.glsl | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/glsl/shader_2d_wired.vert.glsl b/glsl/shader_2d_wired.vert.glsl index 97330dc..28cc55f 100644 --- a/glsl/shader_2d_wired.vert.glsl +++ b/glsl/shader_2d_wired.vert.glsl @@ -15,16 +15,42 @@ */ #version 450 +#extension GL_ARB_separate_shader_objects : enable -layout(location = 0) in vec2 in_position; +layout(location = 0) out int out_instance_index; layout(set = 0, binding = 0) uniform UBOView2D { mat4 proj; } ubo_view; +layout(set = 1, binding = 0) uniform UBORectangles +{ + vec4 positions[128]; +} ubo_sprite_positions; + void main() { - gl_Position = ubo_view.proj * vec4(in_position, 0.0, 1.0); + vec2 coordinate; + vec4 position = ubo_sprite_positions.positions[gl_InstanceIndex]; + + out_instance_index = gl_InstanceIndex; + + switch(gl_VertexIndex) + { + case 0: + coordinate = vec2(position.x, position.y); + break; + case 1: + coordinate = vec2(position.x, position.w); + break; + case 2: + coordinate = vec2(position.z, position.y); + break; + case 3: + coordinate = vec2(position.z, position.w); + break; + } + gl_Position = ubo_view.proj * vec4(coordinate, 0.0, 1.0); } |