ClangFormat: apply to source, most of intern
[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 }