|
- #version 450 core
-
- #pragma include ./tail_update_shared.glsl
- #pragma include ../misc/global.glsl
-
- in VertexData vertexData[];
-
- layout (points) in;
- layout (points, max_vertices = 1) out;
-
- out vec2 outTail0;
- out vec2 outTail1;
- out vec2 outTail2;
- out vec2 outTail3;
- out vec2 outTail4;
- out vec2 outTail5;
-
- vec2 move(vec2 ref, vec2 point) {
- vec2 dir = ref - point;
- float len = length(dir);
- float diff = max(len - TAIL_LEN, 0.0);
- float force = min(TAIL_FORCE * diff * uGlobal.delta, diff);
-
- return point + normalize(dir) * force;
- }
-
- void main() {
- VertexData d = vertexData[0];
-
- outTail0 = d.pos;
-
- outTail1 = move(d.pos, d.tail[1]);
- outTail2 = move(d.tail[1], d.tail[2]);
- outTail3 = move(d.tail[2], d.tail[3]);
- outTail4 = move(d.tail[3], d.tail[4]);
- outTail5 = move(d.tail[4], d.tail[5]);
-
- EmitVertex();
- EndPrimitive();
- }
|