65c134f88b4a64786e3b2f756a5e527e1452c9ae
[platform/core/uifw/dali-core.git] / dali / internal / render / shader-source / distance-field-font-outline.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
38   varying mediump vec2      vTexCoord;
39   varying lowp vec4         vColor;
40
41   void main()
42   {
43     // sample distance field
44     mediump float distance = texture2D(sTexture, vTexCoord).a;
45
46     mediump float smoothWidth = fwidth(distance) * 0.8;
47
48     mediump float outlineWidth = uOutline[1] + smoothWidth;
49
50     // blend fragment color between outline color and text color
51     mediump float outlineBlend = smoothstep(uOutline[0] - outlineWidth, uOutline[0] + outlineWidth, distance);
52     lowp vec4 clampedColor = clamp( vColor, 0.0, 1.0 );
53     lowp vec4 outlineColor = vec4( uOutlineColor.rgb, uOutlineColor.a * clampedColor.a );
54     lowp vec4 color = mix(outlineColor, clampedColor, outlineBlend);
55
56     // adjust fragment alpha by sampled distance
57     color.a *= smoothstep(uSmoothing - smoothWidth, uSmoothing + smoothWidth, distance);
58
59     // final color multiplied by Actor color
60     gl_FragColor = uColor * color;
61   }
62
63 </FragmentShader>