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;
9 #define SQRT2_2 0.70711 /* 1 / sqrt(2.) */
18 glyph_info_t glyph_info_decode (vec4 v)
21 gi.nominal_size = (ivec2 (mod (v.zw, 256.)) + 2) / 4;
22 gi.atlas_pos = ivec2 (v_glyph.zw) / 256;
27 float antialias (float d)
29 return smoothstep (-.75, +.75, d);
32 vec4 source_over (const vec4 src, const vec4 dst)
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);
42 glyph_info_t gi = glyph_info_decode (v_glyph);
44 /* isotropic antialiasing */
47 float m = length (vec2 (length (dpdx), length (dpdy))) * SQRT2_2;
49 vec4 color = vec4( vColor.rgb * uColor.rgb, vColor.a * uColor.a );
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;
55 sdist -= u_boldness * 10.;
56 if ( glyphy_iszero( u_outline ) )
57 sdist = abs (sdist) - u_outline_thickness * .5;
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);