Merge "Move glyphy shaders into separate files" into devel/master
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / graphics / shaders / glyphy-shader-main.frag
1 uniform float u_contrast;
2 uniform float u_gamma_adjust;
3 uniform float u_outline_thickness;
4 uniform float u_outline;
5 uniform float u_boldness;
6
7 varying vec4 v_glyph;
8
9 #define SQRT2_2 0.70711 /* 1 / sqrt(2.) */
10 #define SQRT2   1.41421
11
12 struct glyph_info_t
13 {
14   ivec2 nominal_size;
15   ivec2 atlas_pos;
16 };
17
18 glyph_info_t glyph_info_decode (vec4 v)
19 {
20   glyph_info_t gi;
21   gi.nominal_size = (ivec2 (mod (v.zw, 256.)) + 2) / 4;
22   gi.atlas_pos = ivec2 (v_glyph.zw) / 256;
23   return gi;
24 }
25
26
27 float antialias (float d)
28 {
29   return smoothstep (-.75, +.75, d);
30 }
31
32 vec4 source_over (const vec4 src, const vec4 dst)
33 {
34   // http://dev.w3.org/fxtf/compositing-1/#porterduffcompositingoperators_srcover
35   float alpha = src.a + (dst.a * (1. - src.a));
36   return vec4 (((src.rgb * src.a) + (dst.rgb * dst.a * (1. - src.a))) / alpha, alpha);
37 }
38
39 void main()
40 {
41   vec2 p = v_glyph.xy;
42   glyph_info_t gi = glyph_info_decode (v_glyph);
43
44   /* isotropic antialiasing */
45   vec2 dpdx = dFdx (p);
46   vec2 dpdy = dFdy (p);
47   float m = length (vec2 (length (dpdx), length (dpdy))) * SQRT2_2;
48
49   vec4 color = vec4( vColor.rgb * uColor.rgb, vColor.a * uColor.a );
50
51   ivec4 uu_atlas_info = ivec4( u_atlas_info );
52   float gsdist = glyphy_sdf (p, gi.nominal_size GLYPHY_DEMO_EXTRA_ARGS);
53   float sdist = gsdist / m * u_contrast;
54
55   sdist -= u_boldness * 10.;
56   if ( glyphy_iszero( u_outline ) )
57     sdist = abs (sdist) - u_outline_thickness * .5;
58   if (sdist > 1.)
59     discard;
60   float alpha = antialias (-sdist);
61   if (u_gamma_adjust != 1.)
62     alpha = pow (alpha, 1./u_gamma_adjust);
63   color = vec4 (color.rgb,color.a * alpha);
64
65   gl_FragColor = color;
66 }