-"uniform float u_contrast;\n"
-"uniform float u_gamma_adjust;\n"
-"uniform float u_outline_thickness;\n"
-"uniform float u_outline;\n"
-"uniform float u_boldness;\n"
-"\n"
-"varying vec4 v_glyph;\n"
-"\n"
-"\n"
-"#define SQRT2_2 0.70711 /* 1 / sqrt(2.) */\n"
-"#define SQRT2 1.41421\n"
-"\n"
-"struct glyph_info_t {\n"
-" ivec2 nominal_size;\n"
-" ivec2 atlas_pos;\n"
-"};\n"
-"\n"
-"glyph_info_t\n"
-"glyph_info_decode (vec4 v)\n"
-"{\n"
-" glyph_info_t gi;\n"
-" gi.nominal_size = (ivec2 (mod (v.zw, 256.)) + 2) / 4;\n"
-" gi.atlas_pos = ivec2 (v_glyph.zw) / 256;\n"
-" return gi;\n"
-"}\n"
-"\n"
-"\n"
-"float\n"
-"antialias (float d)\n"
-"{\n"
-" return smoothstep (-.75, +.75, d);\n"
-"}\n"
-"\n"
-"vec4\n"
-"source_over (const vec4 src, const vec4 dst)\n"
-"{\n"
-" // http://dev.w3.org/fxtf/compositing-1/#porterduffcompositingoperators_srcover\n"
-" float alpha = src.a + (dst.a * (1. - src.a));\n"
-" return vec4 (((src.rgb * src.a) + (dst.rgb * dst.a * (1. - src.a))) / alpha, alpha);\n"
-"}\n"
-"\n"
-"void\n"
-"main()\n"
-"{\n"
-" vec2 p = v_glyph.xy;\n"
-" glyph_info_t gi = glyph_info_decode (v_glyph);\n"
-"\n"
-" /* isotropic antialiasing */\n"
-" vec2 dpdx = dFdx (p);\n"
-" vec2 dpdy = dFdy (p);\n"
-" float m = length (vec2 (length (dpdx), length (dpdy))) * SQRT2_2;\n"
-"\n"
-" vec4 color = uColor;\n"
-"\n"
-" ivec4 uu_atlas_info = ivec4( u_atlas_info );"
-" float gsdist = glyphy_sdf (p, gi.nominal_size GLYPHY_DEMO_EXTRA_ARGS);\n"
-" float sdist = gsdist / m * u_contrast;\n"
-"\n"
-" sdist -= u_boldness * 10.;\n"
-" if ( glyphy_iszero( u_outline ) )\n"
-" sdist = abs (sdist) - u_outline_thickness * .5;\n"
-" if (sdist > 1.)\n"
-" discard;\n"
-" float alpha = antialias (-sdist);\n"
-" if (u_gamma_adjust != 1.)\n"
-" alpha = pow (alpha, 1./u_gamma_adjust);\n"
-" color = vec4 (color.rgb,color.a * alpha);\n"
-"\n"
-" gl_FragColor = color;\n"
-"}\n"
-;
+ "uniform float u_contrast;\n"
+ "uniform float u_gamma_adjust;\n"
+ "uniform float u_outline_thickness;\n"
+ "uniform float u_outline;\n"
+ "uniform float u_boldness;\n"
+ "\n"
+ "varying vec4 v_glyph;\n"
+ "\n"
+ "\n"
+ "#define SQRT2_2 0.70711 /* 1 / sqrt(2.) */\n"
+ "#define SQRT2 1.41421\n"
+ "\n"
+ "struct glyph_info_t {\n"
+ " ivec2 nominal_size;\n"
+ " ivec2 atlas_pos;\n"
+ "};\n"
+ "\n"
+ "glyph_info_t\n"
+ "glyph_info_decode (vec4 v)\n"
+ "{\n"
+ " glyph_info_t gi;\n"
+ " gi.nominal_size = (ivec2 (mod (v.zw, 256.)) + 2) / 4;\n"
+ " gi.atlas_pos = ivec2 (v_glyph.zw) / 256;\n"
+ " return gi;\n"
+ "}\n"
+ "\n"
+ "\n"
+ "float\n"
+ "antialias (float d)\n"
+ "{\n"
+ " return smoothstep (-.75, +.75, d);\n"
+ "}\n"
+ "\n"
+ "vec4\n"
+ "source_over (const vec4 src, const vec4 dst)\n"
+ "{\n"
+ " // http://dev.w3.org/fxtf/compositing-1/#porterduffcompositingoperators_srcover\n"
+ " float alpha = src.a + (dst.a * (1. - src.a));\n"
+ " return vec4 (((src.rgb * src.a) + (dst.rgb * dst.a * (1. - src.a))) / alpha, alpha);\n"
+ "}\n"
+ "\n"
+ "void\n"
+ "main()\n"
+ "{\n"
+ " vec2 p = v_glyph.xy;\n"
+ " glyph_info_t gi = glyph_info_decode (v_glyph);\n"
+ "\n"
+ " /* isotropic antialiasing */\n"
+ " vec2 dpdx = dFdx (p);\n"
+ " vec2 dpdy = dFdy (p);\n"
+ " float m = length (vec2 (length (dpdx), length (dpdy))) * SQRT2_2;\n"
+ "\n"
+ " vec4 color = vec4( vColor.rgb * uColor.rgb, vColor.a * uColor.a );\n"
+ "\n"
+ " ivec4 uu_atlas_info = ivec4( u_atlas_info );"
+ " float gsdist = glyphy_sdf (p, gi.nominal_size GLYPHY_DEMO_EXTRA_ARGS);\n"
+ " float sdist = gsdist / m * u_contrast;\n"
+ "\n"
+ " sdist -= u_boldness * 10.;\n"
+ " if ( glyphy_iszero( u_outline ) )\n"
+ " sdist = abs (sdist) - u_outline_thickness * .5;\n"
+ " if (sdist > 1.)\n"
+ " discard;\n"
+ " float alpha = antialias (-sdist);\n"
+ " if (u_gamma_adjust != 1.)\n"
+ " alpha = pow (alpha, 1./u_gamma_adjust);\n"
+ " color = vec4 (color.rgb,color.a * alpha);\n"
+ "\n"
+ " gl_FragColor = color;\n"
+ "}\n";