summary refs log tree commit diff
path: root/shader/tri.vert
diff options
context:
space:
mode:
Diffstat (limited to 'shader/tri.vert')
-rw-r--r--shader/tri.vert26
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;
 }