diff options
Diffstat (limited to 'glsl')
-rw-r--r-- | glsl/shader_2d_wired.frag.glsl | 11 | ||||
-rw-r--r-- | glsl/shader_2d_wired.vert.glsl | 30 |
2 files changed, 35 insertions, 6 deletions
diff --git a/glsl/shader_2d_wired.frag.glsl b/glsl/shader_2d_wired.frag.glsl index 0671223..569b950 100644 --- a/glsl/shader_2d_wired.frag.glsl +++ b/glsl/shader_2d_wired.frag.glsl @@ -15,16 +15,19 @@ */ #version 450 +#extension GL_ARB_separate_shader_objects : enable + +layout(location = 0) in flat int in_instance_index; layout(location = 0) out vec4 out_color; -layout(set = 1, binding = 0) uniform UBOModel2D +layout(set = 1, binding = 1) uniform UBOColors { - vec3 color; -} ubo_model_2d; + vec3 colors[128]; +} ubo_colors; void main() { - out_color = vec4(ubo_model_2d.color, 1.0); + out_color = vec4(ubo_colors.colors[in_instance_index], 1.0); } 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); } |