diff options
Diffstat (limited to 'shader/tri.vert')
-rw-r--r-- | shader/tri.vert | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/shader/tri.vert b/shader/tri.vert index 750b2a3..dc7389c 100644 --- a/shader/tri.vert +++ b/shader/tri.vert @@ -4,11 +4,29 @@ layout(set = 1, binding = 0) uniform UBO { mat4 camera; }; -layout(location = 0) in vec2 in_pos; -layout(location = 1) in vec2 in_uv; layout(location = 0) out vec2 out_uv; +layout(location = 1) out vec4 out_color; +layout(location = 2) flat out int out_type; + +struct Particle { + vec2 pos; + float radius, life; + vec3 color; + int type; +}; + +layout(binding = 0) buffer Particles { + Particle pts[]; +}; + +uint tri_idx[6] = { 0, 1, 2, 3, 2, 1 }; +vec2 tri_pos[4] = { {0,0}, {1,0}, {0,1}, {1,1} }; void main() { - gl_Position = camera * vec4(in_pos, 0.0, 1.0); - out_uv = in_uv; + Particle p = pts[gl_VertexIndex / 6]; + vec2 ofs = tri_pos[tri_idx[gl_VertexIndex % 6]]; + out_uv = ofs; + gl_Position = camera * vec4((ofs - 0.5) * p.radius * p.life + p.pos, 0.0, 1.0); + out_color = vec4(p.color,1); + out_type = p.type; } |