605cf56432ee3adf0a2d5454c818078554c47c27
[platform/core/uifw/dali-core.git] / dali / internal / render / shader-source / distance-field-font-outline-glow.txt
1 <VertexShader>
2
3   attribute mediump vec3  aPosition;
4   attribute mediump vec2  aTexCoord;
5
6   uniform   mediump mat4  uMvpMatrix;
7   uniform   lowp    vec4  uColor;
8   uniform   lowp    vec4  uTextColor;
9   uniform   lowp    vec4  uGradientColor;
10   uniform   mediump vec4  uGradientLine;
11   uniform   mediump vec2  uInvTextSize;
12
13   varying   mediump vec2  vTexCoord;
14   varying   lowp    vec4  vColor;
15
16   void main()
17   {
18     gl_Position = uMvpMatrix * vec4(aPosition, 1.0);
19     vTexCoord = aTexCoord;
20
21     lowp float f = dot( aPosition.xy * uInvTextSize - uGradientLine.xy, uGradientLine.zw );
22
23     vColor = mix(uTextColor, uGradientColor, f);
24   }
25
26 </VertexShader>
27
28 <FragmentShader>
29
30 #extension GL_OES_standard_derivatives : enable
31
32   uniform mediump sampler2D sTexture;
33   uniform lowp    vec4      uColor;
34   uniform mediump float     uSmoothing;
35   uniform mediump vec2      uOutline;
36   uniform lowp    vec4      uOutlineColor;
37   uniform mediump float     uGlow;
38   uniform lowp    vec4      uGlowColor;
39
40   varying mediump vec2      vTexCoord;
41   varying lowp vec4         vColor;
42
43   void main()
44   {
45     // sample distance field
46     mediump float distance = texture2D(sTexture, vTexCoord).a;
47
48     mediump float smoothWidth = fwidth(distance) * 0.8;
49
50     mediump float outlineWidth = uOutline[1] + smoothWidth;
51
52     // blend fragment color between outline color and text color
53     mediump float outlineBlend = smoothstep(uOutline[0] - outlineWidth, uOutline[0] + outlineWidth, distance);
54
55     lowp vec4 clampedColor = clamp( vColor, 0.0, 1.0 );
56
57     // create blend between text color and outline color using outlineBlend
58     lowp vec4 outlineColor = vec4( uOutlineColor.rgb, uOutlineColor.a * clampedColor.a );
59     lowp vec4 color = mix(outlineColor, clampedColor, outlineBlend);
60
61     mediump float glowBlend = smoothstep(uSmoothing - smoothWidth, uSmoothing + smoothWidth, distance);
62
63     // blend fragment color between glow color and text color
64     lowp vec4 glowColor = vec4( uGlowColor.rgb, uGlowColor.a * clampedColor.a );
65     color = mix(glowColor, color, glowBlend);
66
67     // fade out glow between uSmoothing and uGlow
68     color.a *= smoothstep(uGlow, uSmoothing, distance);
69
70     // final color multiplied by Actor color
71     gl_FragColor = uColor * color;
72   }
73
74 </FragmentShader>