summaryrefslogtreecommitdiff
path: root/geometry_shader/shaders/normals.gs
blob: 3720a5f3992a0b14a3841b7da0fb1914bbb34801 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#version 330 core
layout(triangles) in;
layout(line_strip, max_vertices = 6) out;

in VS_OUT {
    vec3 normal;
} gs_in[];

uniform mat4 projection;

const float MAGNITUDE = 0.4;

void
generate_line(int index)
{
    gl_Position = projection*gl_in[index].gl_Position;
    EmitVertex();
    gl_Position = projection*(gl_in[index].gl_Position+
                              vec4(gs_in[index].normal, 0.0)*MAGNITUDE);
    EmitVertex();
    EndPrimitive();
}

void
main(void)
{
    /*
    vec4 center = (gl_in[0].gl_Position+
                   gl_in[1].gl_Position+
                   gl_in[2].gl_Position)/3.0;
    vec4 end = center+vec4(((gs_in[0].normal+
                             gs_in[1].normal+
                             gs_in[2].normal)/3.0),
                           0.0)*MAGNITUDE;
    gl_Position = projection*center;
    EmitVertex();
    gl_Position = projection*end;
    EmitVertex();
    EndPrimitive();
    */
    generate_line(0);
    generate_line(1);
    generate_line(2);
}