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;
38 varying mediump vec2 vTexCoord;
39 varying lowp vec4 vColor;
43 // sample distance field
44 mediump float distance = texture2D(sTexture, vTexCoord).a;
46 mediump float smoothWidth = fwidth(distance) * 0.8;
48 mediump float outlineWidth = uOutline[1] + smoothWidth;
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);
56 // adjust fragment alpha by sampled distance
57 color.a *= smoothstep(uSmoothing - smoothWidth, uSmoothing + smoothWidth, distance);
59 // final color multiplied by Actor color
60 gl_FragColor = uColor * color;