Merge branch 'blender2.7'
[blender.git] / source / blender / gpu / shaders / gpu_shader_2D_line_dashed_frag.glsl
1
2 /*
3  * Fragment Shader for dashed lines, with uniform multi-color(s), or any single-color, and any thickness.
4  *
5  * Dashed is performed in screen space.
6  */
7
8 uniform float dash_width;
9
10 /* Simple mode, discarding non-dash parts (so no need for blending at all). */
11 uniform float dash_factor;  /* if > 1.0, solid line. */
12
13 /* More advanced mode, allowing for complex, multi-colored patterns. Enabled when colors_len > 0. */
14 /* Note: max number of steps/colors in pattern is 32! */
15 uniform int colors_len;  /* Enabled if > 0, 1 for solid line. */
16 uniform vec4 colors[32];
17
18 noperspective in float distance_along_line;
19 noperspective in vec4 color_geom;
20
21 out vec4 fragColor;
22
23 void main()
24 {
25         /* Multi-color option. */
26         if (colors_len > 0) {
27                 /* Solid line case, simple. */
28                 if (colors_len == 1) {
29                         fragColor = colors[0];
30                 }
31                 /* Actually dashed line... */
32                 else {
33                         float normalized_distance = fract(distance_along_line / dash_width);
34                         fragColor = colors[int(normalized_distance * colors_len)];
35                 }
36         }
37         /* Single color option. */
38         else {
39                 /* Solid line case, simple. */
40                 if (dash_factor >= 1.0f) {
41                         fragColor = color_geom;
42                 }
43                 /* Actually dashed line... */
44                 else {
45                         float normalized_distance = fract(distance_along_line / dash_width);
46                         if (normalized_distance <= dash_factor) {
47                                 fragColor = color_geom;
48                         }
49                         else {
50                                 discard;
51                         }
52                 }
53         }
54 }