glowygraph 0.8.0

A library for drawing glowy graphs
Documentation
#version 150

uniform mat4 projection;

layout(lines) in;
layout(triangle_strip, max_vertices = 6) out;

in vec4 ginner_color[2];
in vec4 gfalloff_color[2];
in float gfalloff[2];
in float gfalloff_radius[2];
in float ginner_radius[2];
out vec2 delta;
out vec4 finner_color;
out vec4 ffalloff_color;
out float finner_radius;
out float ffalloff_radius;
out float ffalloff;

void main() {
    vec4 first = gl_in[0].gl_Position;
    vec4 second = gl_in[1].gl_Position;

    vec3 full_delta = 2 * normalize(second.xyz - first.xyz);
    vec2 net_delta = 2 * normalize(second.xy - first.xy);

    float radius;

    //Face 1

    //Vertex 0
    finner_color = ginner_color[0];
    ffalloff_color = gfalloff_color[0];
    finner_radius = ginner_radius[0];
    ffalloff_radius = gfalloff_radius[0];
    ffalloff = gfalloff[0];
    radius = finner_radius + ffalloff_radius;
    delta = radius * vec2(net_delta.y, -net_delta.x);
    gl_Position = projection * (first - vec4(delta, 0, 0));
    EmitVertex();

    //Vertex 2
    finner_color = ginner_color[0];
    ffalloff_color = gfalloff_color[0];
    finner_radius = ginner_radius[0];
    ffalloff_radius = gfalloff_radius[0];
    ffalloff = gfalloff[0];
    radius = finner_radius + ffalloff_radius;
    delta = radius * vec2(-net_delta.y, net_delta.x);
    gl_Position = projection * (first - vec4(delta, 0, 0));
    EmitVertex();

    //Vertex 3
    finner_color = ginner_color[1];
    ffalloff_color = gfalloff_color[1];
    finner_radius = ginner_radius[1];
    ffalloff_radius = gfalloff_radius[1];
    ffalloff = gfalloff[1];
    radius = finner_radius + ffalloff_radius;
    delta = radius * vec2(net_delta.y, -net_delta.x);
    gl_Position = projection * (second - vec4(delta, 0, 0));
    EmitVertex();

    EndPrimitive();

    //Face 2

    //Vertex 2
    finner_color = ginner_color[0];
    ffalloff_color = gfalloff_color[0];
    finner_radius = ginner_radius[0];
    ffalloff_radius = gfalloff_radius[0];
    ffalloff = gfalloff[0];
    radius = finner_radius + ffalloff_radius;
    delta = radius * vec2(-net_delta.y, net_delta.x);
    gl_Position = projection * (first - vec4(delta, 0, 0));
    EmitVertex();

    //Vertex 4
    finner_color = ginner_color[1];
    ffalloff_color = gfalloff_color[1];
    finner_radius = ginner_radius[1];
    ffalloff_radius = gfalloff_radius[1];
    ffalloff = gfalloff[1];
    radius = finner_radius + ffalloff_radius;
    delta = radius * vec2(-net_delta.y, net_delta.x);
    gl_Position = projection * (second - vec4(delta, 0, 0));
    EmitVertex();

    //Vertex 3
    finner_color = ginner_color[1];
    ffalloff_color = gfalloff_color[1];
    finner_radius = ginner_radius[1];
    ffalloff_radius = gfalloff_radius[1];
    ffalloff = gfalloff[1];
    radius = finner_radius + ffalloff_radius;
    delta = radius * vec2(net_delta.y, -net_delta.x);
    gl_Position = projection * (second - vec4(delta, 0, 0));
    EmitVertex();

    EndPrimitive();
}