GPencil: Add option to mix color with texture
[blender.git] / source / blender / draw / engines / gpencil / shaders / gpencil_stroke_frag.glsl
1 uniform int color_type;
2 uniform sampler2D myTexture;
3
4 uniform float gradient_f;
5
6 uniform vec4 colormix;
7 uniform float mix_stroke_factor;
8
9 in vec4 mColor;
10 in vec2 mTexCoord;
11 in vec2 uvfac;
12
13 out vec4 fragColor;
14
15 #define texture2D texture
16
17 /* keep this list synchronized with list in gpencil_engine.h */
18 #define GPENCIL_COLOR_SOLID 0
19 #define GPENCIL_COLOR_TEXTURE 1
20 #define GPENCIL_COLOR_PATTERN 2
21
22 #define ENDCAP 1.0
23
24 void main()
25 {
26
27   vec4 tColor = vec4(mColor);
28   /* if uvfac[1]  == 1, then encap */
29   if (uvfac[1] == ENDCAP) {
30     vec2 center = vec2(uvfac[0], 0.5);
31     float dist = length(mTexCoord - center);
32     if (dist > 0.50) {
33       discard;
34     }
35   }
36   /* Solid */
37   if (color_type == GPENCIL_COLOR_SOLID) {
38     fragColor = tColor;
39   }
40
41   /* texture for endcaps */
42   vec4 text_color;
43   if (uvfac[1] == ENDCAP) {
44     text_color = texture2D(myTexture, vec2(mTexCoord.x, mTexCoord.y));
45   }
46   else {
47     text_color = texture2D(myTexture, mTexCoord);
48   }
49
50   /* texture */
51   if (color_type == GPENCIL_COLOR_TEXTURE) {
52     if (mix_stroke_factor > 0.0) {
53       fragColor.rgb = mix(text_color.rgb, colormix.rgb, mix_stroke_factor);
54       fragColor.a = text_color.a;
55     }
56     else {
57       fragColor = text_color;
58     }
59
60     /* mult both alpha factor to use strength factor */
61     fragColor.a = min(fragColor.a * tColor.a, fragColor.a);
62   }
63   /* pattern */
64   if (color_type == GPENCIL_COLOR_PATTERN) {
65     fragColor = tColor;
66     /* mult both alpha factor to use strength factor with color alpha limit */
67     fragColor.a = min(text_color.a * tColor.a, tColor.a);
68   }
69
70   /* gradient */
71   /* keep this disabled while the line glitch bug exists
72   if (gradient_f < 1.0) {
73     float d = abs(mTexCoord.y - 0.5)  * (1.1 - gradient_f);
74     float alpha = 1.0 - clamp((fragColor.a - (d * 2.0)), 0.03, 1.0);
75     fragColor.a = smoothstep(fragColor.a, 0.0, alpha);
76     
77   }
78   */
79
80   if (fragColor.a < 0.0035)
81     discard;
82 }