9a0bda3b81dfe6ccd69b7579d071c81098ccd8f4
[blender.git] / source / blender / draw / modes / shaders / edit_mesh_overlay_geom.glsl
1
2 layout(lines) in;
3 layout(triangle_strip, max_vertices = 4) out;
4
5 uniform vec2 viewportSize;
6 uniform vec2 viewportSizeInv;
7 uniform float edgeScale;
8
9 in vec4 finalColor[2];
10 in vec4 finalColorOuter[2];
11 in int selectOveride[2];
12
13 flat out vec4 finalColorOuter_f;
14 out vec4 finalColor_f;
15 out float edgeCoord_f;
16
17 void do_vertex(const int i, float coord, vec2 offset)
18 {
19         finalColor_f = (selectOveride[0] == 0) ? finalColor[i] : finalColor[0];
20         edgeCoord_f = coord;
21         gl_Position = gl_in[i].gl_Position;
22         /* Multiply offset by 2 because gl_Position range is [-1..1]. */
23         gl_Position.xy += offset * 2.0 * gl_Position.w;
24 #ifdef USE_WORLD_CLIP_PLANES
25         world_clip_planes_set_clip_distance(gl_in[i].gl_ClipDistance);
26 #endif
27         EmitVertex();
28 }
29
30 void main()
31 {
32         vec2 ss_pos[2];
33         ss_pos[0] = gl_in[0].gl_Position.xy / gl_in[0].gl_Position.w;
34         ss_pos[1] = gl_in[1].gl_Position.xy / gl_in[1].gl_Position.w;
35
36         vec2 line = ss_pos[0] - ss_pos[1];
37         line = abs(line) * viewportSize;
38
39         finalColorOuter_f = finalColorOuter[0];
40         float half_size = sizeEdge * edgeScale;
41         /* Enlarge edge for flag display. */
42         half_size += (finalColorOuter_f.a > 0.0) ? max(sizeEdge * edgeScale, 1.0) : 0.0;
43
44 #ifdef USE_SMOOTH_WIRE
45         /* Add 1 px for AA */
46         half_size += 0.5;
47 #endif
48
49         vec3 edge_ofs = half_size * viewportSizeInv.xyy * vec3(1.0, 1.0, 0.0);
50
51         bool horizontal = line.x > line.y;
52         edge_ofs = (horizontal) ? edge_ofs.zyz : edge_ofs.xzz;
53
54         do_vertex(0,  half_size,  edge_ofs.xy);
55         do_vertex(0, -half_size, -edge_ofs.xy);
56         do_vertex(1,  half_size,  edge_ofs.xy);
57         do_vertex(1, -half_size, -edge_ofs.xy);
58
59         EndPrimitive();
60 }