layout(lines, invocations=2) in; layout(line_strip, max_vertices=2) out; in int gl_InvocationID; out vec4 fcolor; in vec4 fca[]; uniform mat4 mvp; void main(){ if(gl_in[0].gl_Position.x > 0) return; if(gl_InvocationID == 1){ gl_Position = mvp * gl_in[0].gl_Position; fcolor = fca[0]; EmitVertex(); gl_Position = mvp * gl_in[1].gl_Position; fcolor = fca[1]; EmitVertex(); EndPrimitive(); } else { gl_Position = mvp * gl_in[0].gl_Position + vec4(2, 0, 0, 0); fcolor = vec4(1, .2, .6, 1); EmitVertex(); gl_Position = mvp * gl_in[1].gl_Position + vec4(2, 0, 0, 0); fcolor = vec4(1, .2, .6, 1); EmitVertex(); EndPrimitive(); } } in vec3 coord3d; uniform mat4 mvp; uniform float wind; out vec4 fca; void main(void) { float xdisp = coord3d.x; float zdisp = coord3d.z; if(coord3d.y > -2){ xdisp += (coord3d.y+2)/5.0 * wind; } gl_Position = vec4(xdisp, coord3d.y, zdisp, 1.0); if(coord3d.y > 0) fca = vec4(0, .6, .2, 1); else fca = vec4(.5, .6, 0, 1); }