3 attribute mediump vec3 aPosition;
4 attribute mediump vec2 aTexCoord;
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;
13 varying mediump vec2 vTexCoord;
14 varying lowp vec4 vColor;
18 gl_Position = uMvpMatrix * vec4(aPosition, 1.0);
19 vTexCoord = aTexCoord;
21 lowp float f = dot( aPosition.xy * uInvTextSize - uGradientLine.xy, uGradientLine.zw );
23 vColor = mix(uTextColor, uGradientColor, f);
30 #extension GL_OES_standard_derivatives : enable
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;
40 varying mediump vec2 vTexCoord;
41 varying lowp vec4 vColor;
45 // sample distance field
46 mediump float distance = texture2D(sTexture, vTexCoord).a;
48 mediump float smoothWidth = fwidth(distance) * 0.8;
50 mediump float outlineWidth = uOutline[1] + smoothWidth;
52 // blend fragment color between outline color and text color
53 mediump float outlineBlend = smoothstep(uOutline[0] - outlineWidth, uOutline[0] + outlineWidth, distance);
55 lowp vec4 clampedColor = clamp( vColor, 0.0, 1.0 );
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);
61 mediump float glowBlend = smoothstep(uSmoothing - smoothWidth, uSmoothing + smoothWidth, distance);
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);
67 // fade out glow between uSmoothing and uGlow
68 color.a *= smoothstep(uGlow, uSmoothing, distance);
70 // final color multiplied by Actor color
71 gl_FragColor = uColor * color;