Procházet zdrojové kódy

Merge branch 'sdf-font'

aster před 11 roky
rodič
revize
37c7fd333a

+ 33 - 0
Bin/CoreData/Shaders/GLSL/Text.glsl

@@ -0,0 +1,33 @@
+#include "Uniforms.glsl"
+#include "Samplers.glsl"
+#include "Transform.glsl"
+
+varying vec2 vTexCoord;
+varying vec4 vColor;
+
+void VS()
+{
+    mat4 modelMatrix = iModelMatrix;
+    vec3 worldPos = GetWorldPos(modelMatrix);
+    gl_Position = GetClipPos(worldPos);
+    
+    vTexCoord = iTexCoord;
+    vColor = iColor;
+}
+
+void PS()
+{
+    gl_FragColor.rgb = vColor.rgb;
+
+#ifdef SIGNED_DISTANCE_FIELD
+    float distance = texture2D(sDiffMap, vTexCoord).a;
+    if (distance < 0.5f)
+        gl_FragColor.a = 0.0;
+    else
+        gl_FragColor.a = vColor.a;
+
+    gl_FragColor.a *= smoothstep(0.5f, 0.505f, distance);
+#else
+    gl_FragColor.a = vColor.a * texture2D(sDiffMap, vTexCoord).a;
+#endif
+}

+ 37 - 0
Bin/CoreData/Shaders/HLSL/Text.hlsl

@@ -0,0 +1,37 @@
+#include "Uniforms.hlsl"
+#include "Samplers.hlsl"
+#include "Transform.hlsl"
+
+void VS(float4 iPos : POSITION,
+        float4 iColor : COLOR0,
+        float2 iTexCoord : TEXCOORD0,
+        out float4 oPos : POSITION,
+        out float4 oColor : COLOR0,
+        out float2 oTexCoord : TEXCOORD0)
+{
+    float4x3 modelMatrix = iModelMatrix;
+    float3 worldPos = GetWorldPos(modelMatrix);
+    oPos = GetClipPos(worldPos);
+    oColor = iColor;
+    oTexCoord = iTexCoord;
+}
+
+void PS(float4 iColor : COLOR0,
+        float2 iTexCoord : TEXCOORD0,
+        out float4 oColor : COLOR0)
+{
+    oColor.rgb = iColor.rgb;
+
+#ifdef SIGNED_DISTANCE_FIELD
+    float distance = tex2D(sDiffMap, iTexCoord).a;
+    if (distance < 0.5f)
+        oColor.a = 0.0f;
+    else
+        oColor.a = iColor.a;
+
+    oColor.a *= smoothstep(0.5f, 0.505f, distance);
+#else
+    oColor.a = iColor.a * tex2D(sDiffMap, iTexCoord).a;
+#endif
+}
+

binární
Bin/Data/Fonts/Anonymous Pro.png


+ 179 - 0
Bin/Data/Fonts/Anonymous Pro.sdf

@@ -0,0 +1,179 @@
+<?xml version="1.0"?>
+<font>
+<info face="Anonymous Pro" size="24" bold="0" italic="0" charset="" unicode="1" stretchH="100" smooth="0" aa="1" padding="0,1,1,0" spacing="0,0" outline="0"/>
+<common lineHeight="24" base="19" scaleW="512" scaleH="256" pages="1" packed="0" alphaChnl="0" redChnl="4" greenChnl="4" blueChnl="4" />
+<pages>
+    <page id="0" file="Anonymous Pro.png" />
+</pages>
+<chars count="169">
+<char id="32" x="0" y="0" width="0" height="0" xoffset="22" yoffset="40" xadvance="21" page="0"  chnl="15" />
+<char id="97" x="177" y="164" width="23" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="98" x="418" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="99" x="269" y="164" width="23" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="100" x="138" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="101" x="246" y="164" width="23" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="102" x="352" y="123" width="19" height="41" xoffset="3" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="103" x="85" y="164" width="23" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="104" x="484" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="105" x="314" y="123" width="19" height="41" xoffset="3" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="106" x="184" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="107" x="0" y="123" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="108" x="371" y="123" width="19" height="41" xoffset="3" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="109" x="223" y="164" width="23" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="110" x="382" y="164" width="22" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="111" x="131" y="164" width="23" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="112" x="404" y="164" width="22" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="113" x="315" y="164" width="23" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="114" x="292" y="164" width="23" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="115" x="154" y="164" width="23" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="116" x="391" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="117" x="237" y="199" width="22" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="118" x="466" y="198" width="23" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="119" x="472" y="164" width="23" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="120" x="489" y="198" width="23" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="121" x="426" y="164" width="23" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="122" x="39" y="200" width="22" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="65" x="72" y="0" width="24" height="41" xoffset="-1" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="66" x="88" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="67" x="211" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="68" x="44" y="123" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="69" x="66" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="70" x="154" y="123" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="71" x="142" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="72" x="374" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="73" x="333" y="123" width="19" height="41" xoffset="3" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="74" x="96" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="75" x="44" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="76" x="176" y="123" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="77" x="352" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="78" x="66" y="123" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="79" x="188" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="80" x="286" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="81" x="280" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="82" x="264" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="83" x="88" y="123" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="84" x="418" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="85" x="132" y="123" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="86" x="24" y="0" width="24" height="41" xoffset="-1" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="87" x="0" y="0" width="24" height="41" xoffset="-1" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="88" x="0" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="89" x="487" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="90" x="110" y="123" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="48" x="395" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="49" x="326" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="50" x="372" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="51" x="308" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="52" x="349" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="53" x="303" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="54" x="257" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="55" x="483" y="41" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="56" x="441" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="57" x="464" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="46" x="483" y="232" width="13" height="20" xoffset="7" yoffset="21" xadvance="21" page="0"  chnl="15" />
+<char id="44" x="496" y="232" width="16" height="20" xoffset="4" yoffset="21" xadvance="21" page="0"  chnl="15" />
+<char id="33" x="445" y="123" width="16" height="41" xoffset="7" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="63" x="198" y="123" width="20" height="41" xoffset="3" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="45" x="412" y="233" width="23" height="19" xoffset="0" yoffset="14" xadvance="21" page="0"  chnl="15" />
+<char id="43" x="108" y="164" width="23" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="92" x="218" y="123" width="20" height="41" xoffset="2" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="47" x="176" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="40" x="295" y="123" width="19" height="41" xoffset="3" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="41" x="409" y="123" width="18" height="41" xoffset="4" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="58" x="4" y="202" width="13" height="34" xoffset="7" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="59" x="495" y="164" width="16" height="34" xoffset="4" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="37" x="23" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="38" x="165" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="96" x="427" y="123" width="18" height="41" xoffset="4" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="39" x="477" y="123" width="16" height="41" xoffset="7" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="42" x="105" y="199" width="22" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="35" x="397" y="199" width="23" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="36" x="69" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="61" x="999999" y="999999" width="23" height="28" xoffset="0" yoffset="10" xadvance="21" page="0"  chnl="15" />
+<char id="91" x="461" y="123" width="16" height="41" xoffset="7" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="93" x="257" y="123" width="19" height="41" xoffset="3" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="64" x="161" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="94" x="999999" y="999999" width="23" height="31" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="123" x="276" y="123" width="19" height="41" xoffset="3" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="125" x="390" y="123" width="19" height="41" xoffset="3" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="95" x="389" y="233" width="23" height="15" xoffset="0" yoffset="26" xadvance="21" page="0"  chnl="15" />
+<char id="126" x="999999" y="999999" width="23" height="26" xoffset="0" yoffset="11" xadvance="21" page="0"  chnl="15" />
+<char id="34" x="238" y="123" width="19" height="41" xoffset="3" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="62" x="23" y="164" width="20" height="36" xoffset="2" yoffset="5" xadvance="21" page="0"  chnl="15" />
+<char id="60" x="43" y="164" width="19" height="36" xoffset="3" yoffset="5" xadvance="21" page="0"  chnl="15" />
+<char id="8211" x="435" y="233" width="23" height="19" xoffset="0" yoffset="14" xadvance="21" page="0"  chnl="15" />
+<char id="8212" x="458" y="232" width="25" height="19" xoffset="-1" yoffset="14" xadvance="21" page="0"  chnl="15" />
+<char id="171" x="999999" y="999999" width="23" height="30" xoffset="0" yoffset="9" xadvance="21" page="0"  chnl="15" />
+<char id="187" x="999999" y="999999" width="20" height="30" xoffset="2" yoffset="9" xadvance="21" page="0"  chnl="15" />
+<char id="8220" x="0" y="82" width="22" height="41" xoffset="1" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="8221" x="115" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="124" x="493" y="123" width="15" height="41" xoffset="7" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1072" x="177" y="164" width="23" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="1073" x="276" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1074" x="171" y="199" width="22" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1075" x="149" y="199" width="22" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1076" x="259" y="199" width="23" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1077" x="246" y="164" width="23" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="1105" x="230" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1078" x="420" y="199" width="23" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1079" x="200" y="164" width="23" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="1080" x="193" y="199" width="22" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1081" x="220" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1082" x="215" y="199" width="22" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1083" x="351" y="199" width="23" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1084" x="127" y="199" width="22" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1085" x="17" y="202" width="22" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1086" x="131" y="164" width="23" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="1087" x="999999" y="999999" width="22" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1088" x="404" y="164" width="22" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="1089" x="62" y="164" width="23" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="1090" x="374" y="199" width="23" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1091" x="426" y="164" width="23" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1092" x="345" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1093" x="489" y="198" width="23" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1094" x="61" y="200" width="22" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1095" x="83" y="199" width="22" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1096" x="305" y="199" width="23" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1097" x="282" y="199" width="23" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1098" x="328" y="199" width="23" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1099" x="443" y="198" width="23" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1100" x="999999" y="999999" width="22" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1101" x="360" y="164" width="22" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="1102" x="338" y="164" width="22" height="35" xoffset="0" yoffset="6" xadvance="21" page="0"  chnl="15" />
+<char id="1103" x="449" y="164" width="23" height="34" xoffset="0" yoffset="7" xadvance="21" page="0"  chnl="15" />
+<char id="1040" x="72" y="0" width="24" height="41" xoffset="-1" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1041" x="198" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1042" x="88" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1043" x="110" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1044" x="234" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1045" x="66" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1025" x="132" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1046" x="48" y="0" width="24" height="41" xoffset="-1" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1047" x="242" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1048" x="22" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1049" x="154" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1050" x="44" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1051" x="119" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1052" x="352" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1053" x="374" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1054" x="188" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1055" x="330" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1056" x="286" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1057" x="322" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1058" x="418" y="0" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1059" x="460" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1060" x="414" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1061" x="0" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1063" x="396" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1062" x="440" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1064" x="46" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1065" x="207" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1066" x="299" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1067" x="253" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1068" x="22" y="123" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1069" x="92" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1070" x="462" y="82" width="22" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1071" x="437" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="169" x="0" y="164" width="23" height="38" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="174" x="368" y="41" width="23" height="41" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+</chars> 
+</font>

binární
Bin/Data/Fonts/BlueHighway.png


+ 1091 - 0
Bin/Data/Fonts/BlueHighway.sdf

@@ -0,0 +1,1091 @@
+<?xml version="1.0"?>
+<font>
+<info face="Blue Highway" size="24" bold="0" italic="0" charset="" unicode="1" stretchH="100" smooth="0" aa="1" padding="0,1,1,0" spacing="0,0" outline="0"/>
+<common lineHeight="24" base="19" scaleW="512" scaleH="256" pages="1" packed="0" alphaChnl="0" redChnl="4" greenChnl="4" blueChnl="4" />
+<pages>
+    <page id="0" file="BlueHighway.png" />
+</pages>
+<chars count="169">
+<char id="32" x="0" y="0" width="0" height="0" xoffset="10" yoffset="38" xadvance="9" page="0"  chnl="15" />
+<char id="97" x="441" y="157" width="16" height="34" xoffset="0" yoffset="5" xadvance="15" page="0"  chnl="15" />
+<char id="98" x="158" y="80" width="16" height="39" xoffset="1" yoffset="0" xadvance="17" page="0"  chnl="15" />
+<char id="99" x="30" y="189" width="15" height="34" xoffset="1" yoffset="5" xadvance="15" page="0"  chnl="15" />
+<char id="100" x="190" y="80" width="17" height="39" xoffset="1" yoffset="0" xadvance="17" page="0"  chnl="15" />
+<char id="101" x="424" y="157" width="17" height="34" xoffset="1" yoffset="5" xadvance="17" page="0"  chnl="15" />
+<char id="102" x="502" y="40" width="10" height="39" xoffset="0" yoffset="0" xadvance="9" page="0"  chnl="15" />
+<char id="103" x="373" y="157" width="17" height="34" xoffset="1" yoffset="5" xadvance="17" page="0"  chnl="15" />
+<char id="104" x="174" y="80" width="16" height="39" xoffset="1" yoffset="0" xadvance="16" page="0"  chnl="15" />
+<char id="105" x="347" y="118" width="7" height="39" xoffset="1" yoffset="0" xadvance="7" page="0"  chnl="15" />
+<char id="106" x="363" y="118" width="9" height="39" xoffset="0" yoffset="0" xadvance="7" page="0"  chnl="15" />
+<char id="107" x="3" y="80" width="15" height="39" xoffset="1" yoffset="0" xadvance="15" page="0"  chnl="15" />
+<char id="108" x="327" y="118" width="6" height="39" xoffset="1" yoffset="0" xadvance="7" page="0"  chnl="15" />
+<char id="109" x="307" y="157" width="25" height="34" xoffset="1" yoffset="5" xadvance="26" page="0"  chnl="15" />
+<char id="110" x="473" y="157" width="16" height="34" xoffset="1" yoffset="5" xadvance="16" page="0"  chnl="15" />
+<char id="111" x="390" y="157" width="17" height="34" xoffset="1" yoffset="5" xadvance="17" page="0"  chnl="15" />
+<char id="112" x="356" y="157" width="17" height="34" xoffset="1" yoffset="5" xadvance="17" page="0"  chnl="15" />
+<char id="113" x="407" y="157" width="17" height="34" xoffset="1" yoffset="5" xadvance="17" page="0"  chnl="15" />
+<char id="114" x="73" y="189" width="10" height="34" xoffset="1" yoffset="5" xadvance="11" page="0"  chnl="15" />
+<char id="115" x="59" y="189" width="14" height="34" xoffset="1" yoffset="5" xadvance="14" page="0"  chnl="15" />
+<char id="116" x="401" y="118" width="11" height="39" xoffset="0" yoffset="0" xadvance="9" page="0"  chnl="15" />
+<char id="117" x="457" y="157" width="16" height="34" xoffset="1" yoffset="5" xadvance="16" page="0"  chnl="15" />
+<char id="118" x="0" y="189" width="15" height="34" xoffset="0" yoffset="5" xadvance="14" page="0"  chnl="15" />
+<char id="119" x="332" y="157" width="24" height="34" xoffset="0" yoffset="5" xadvance="23" page="0"  chnl="15" />
+<char id="120" x="489" y="157" width="15" height="34" xoffset="0" yoffset="5" xadvance="14" page="0"  chnl="15" />
+<char id="121" x="15" y="189" width="15" height="34" xoffset="0" yoffset="5" xadvance="14" page="0"  chnl="15" />
+<char id="122" x="45" y="189" width="14" height="34" xoffset="1" yoffset="5" xadvance="14" page="0"  chnl="15" />
+<char id="65" x="482" y="40" width="20" height="39" xoffset="0" yoffset="0" xadvance="18" page="0"  chnl="15" />
+<char id="66" x="224" y="79" width="17" height="39" xoffset="1" yoffset="0" xadvance="17" page="0"  chnl="15" />
+<char id="67" x="436" y="79" width="19" height="39" xoffset="1" yoffset="0" xadvance="20" page="0"  chnl="15" />
+<char id="68" x="442" y="40" width="20" height="39" xoffset="1" yoffset="0" xadvance="20" page="0"  chnl="15" />
+<char id="69" x="63" y="80" width="15" height="39" xoffset="1" yoffset="0" xadvance="15" page="0"  chnl="15" />
+<char id="70" x="262" y="118" width="14" height="38" xoffset="1" yoffset="1" xadvance="15" page="0"  chnl="15" />
+<char id="71" x="462" y="40" width="20" height="39" xoffset="1" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="72" x="379" y="79" width="19" height="39" xoffset="1" yoffset="0" xadvance="19" page="0"  chnl="15" />
+<char id="73" x="506" y="0" width="6" height="39" xoffset="2" yoffset="0" xadvance="7" page="0"  chnl="15" />
+<char id="74" x="445" y="118" width="13" height="39" xoffset="0" yoffset="0" xadvance="12" page="0"  chnl="15" />
+<char id="75" x="275" y="79" width="17" height="39" xoffset="1" yoffset="0" xadvance="18" page="0"  chnl="15" />
+<char id="76" x="33" y="80" width="15" height="39" xoffset="1" yoffset="0" xadvance="15" page="0"  chnl="15" />
+<char id="77" x="316" y="40" width="22" height="39" xoffset="1" yoffset="0" xadvance="22" page="0"  chnl="15" />
+<char id="78" x="398" y="79" width="19" height="39" xoffset="1" yoffset="0" xadvance="19" page="0"  chnl="15" />
+<char id="79" x="381" y="40" width="21" height="39" xoffset="1" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="80" x="292" y="79" width="17" height="39" xoffset="1" yoffset="0" xadvance="17" page="0"  chnl="15" />
+<char id="81" x="360" y="40" width="21" height="39" xoffset="1" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="82" x="241" y="79" width="17" height="39" xoffset="1" yoffset="0" xadvance="18" page="0"  chnl="15" />
+<char id="83" x="258" y="79" width="17" height="39" xoffset="1" yoffset="0" xadvance="17" page="0"  chnl="15" />
+<char id="84" x="309" y="118" width="18" height="38" xoffset="0" yoffset="1" xadvance="17" page="0"  chnl="15" />
+<char id="85" x="343" y="79" width="18" height="39" xoffset="1" yoffset="0" xadvance="19" page="0"  chnl="15" />
+<char id="86" x="417" y="79" width="19" height="39" xoffset="0" yoffset="0" xadvance="18" page="0"  chnl="15" />
+<char id="87" x="212" y="40" width="29" height="39" xoffset="0" yoffset="0" xadvance="28" page="0"  chnl="15" />
+<char id="88" x="493" y="79" width="19" height="39" xoffset="0" yoffset="0" xadvance="18" page="0"  chnl="15" />
+<char id="89" x="474" y="79" width="19" height="39" xoffset="0" yoffset="0" xadvance="17" page="0"  chnl="15" />
+<char id="90" x="292" y="118" width="17" height="38" xoffset="1" yoffset="1" xadvance="16" page="0"  chnl="15" />
+<char id="48" x="455" y="79" width="19" height="39" xoffset="1" yoffset="0" xadvance="19" page="0"  chnl="15" />
+<char id="49" x="381" y="118" width="9" height="39" xoffset="0" yoffset="0" xadvance="8" page="0"  chnl="15" />
+<char id="50" x="78" y="80" width="16" height="39" xoffset="1" yoffset="0" xadvance="16" page="0"  chnl="15" />
+<char id="51" x="110" y="80" width="16" height="39" xoffset="1" yoffset="0" xadvance="16" page="0"  chnl="15" />
+<char id="52" x="361" y="79" width="18" height="39" xoffset="0" yoffset="0" xadvance="17" page="0"  chnl="15" />
+<char id="53" x="207" y="80" width="17" height="39" xoffset="1" yoffset="0" xadvance="17" page="0"  chnl="15" />
+<char id="54" x="142" y="80" width="16" height="39" xoffset="1" yoffset="0" xadvance="16" page="0"  chnl="15" />
+<char id="55" x="276" y="118" width="16" height="38" xoffset="1" yoffset="1" xadvance="16" page="0"  chnl="15" />
+<char id="56" x="126" y="80" width="16" height="39" xoffset="1" yoffset="0" xadvance="16" page="0"  chnl="15" />
+<char id="57" x="94" y="80" width="16" height="39" xoffset="1" yoffset="0" xadvance="16" page="0"  chnl="15" />
+<char id="46" x="249" y="191" width="6" height="21" xoffset="1" yoffset="18" xadvance="6" page="0"  chnl="15" />
+<char id="44" x="243" y="191" width="6" height="21" xoffset="1" yoffset="18" xadvance="6" page="0"  chnl="15" />
+<char id="33" x="333" y="118" width="7" height="39" xoffset="1" yoffset="0" xadvance="7" page="0"  chnl="15" />
+<char id="63" x="484" y="118" width="14" height="39" xoffset="1" yoffset="0" xadvance="14" page="0"  chnl="15" />
+<char id="45" x="296" y="191" width="8" height="20" xoffset="0" yoffset="9" xadvance="7" page="0"  chnl="15" />
+<char id="43" x="83" y="189" width="18" height="33" xoffset="1" yoffset="3" xadvance="18" page="0"  chnl="15" />
+<char id="92" x="471" y="118" width="13" height="39" xoffset="0" yoffset="0" xadvance="12" page="0"  chnl="15" />
+<char id="47" x="458" y="118" width="13" height="39" xoffset="0" yoffset="0" xadvance="12" page="0"  chnl="15" />
+<char id="40" x="372" y="118" width="9" height="39" xoffset="2" yoffset="0" xadvance="10" page="0"  chnl="15" />
+<char id="41" x="390" y="118" width="11" height="39" xoffset="0" yoffset="0" xadvance="10" page="0"  chnl="15" />
+<char id="58" x="504" y="157" width="7" height="33" xoffset="1" yoffset="6" xadvance="7" page="0"  chnl="15" />
+<char id="59" x="2" y="119" width="7" height="33" xoffset="1" yoffset="6" xadvance="7" page="0"  chnl="15" />
+<char id="37" x="291" y="40" width="25" height="39" xoffset="1" yoffset="0" xadvance="25" page="0"  chnl="15" />
+<char id="38" x="338" y="40" width="22" height="39" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="96" x="354" y="118" width="9" height="39" xoffset="1" yoffset="0" xadvance="8" page="0"  chnl="15" />
+<char id="39" x="239" y="118" width="5" height="38" xoffset="1" yoffset="1" xadvance="5" page="0"  chnl="15" />
+<char id="42" x="155" y="189" width="16" height="32" xoffset="0" yoffset="0" xadvance="16" page="0"  chnl="15" />
+<char id="35" x="402" y="40" width="20" height="39" xoffset="1" yoffset="0" xadvance="20" page="0"  chnl="15" />
+<char id="36" x="326" y="79" width="17" height="39" xoffset="1" yoffset="0" xadvance="16" page="0"  chnl="15" />
+<char id="61" x="171" y="189" width="18" height="29" xoffset="1" yoffset="5" xadvance="18" page="0"  chnl="15" />
+<char id="91" x="244" y="118" width="8" height="38" xoffset="3" yoffset="1" xadvance="10" page="0"  chnl="15" />
+<char id="93" x="412" y="118" width="11" height="39" xoffset="0" yoffset="0" xadvance="10" page="0"  chnl="15" />
+<char id="64" x="219" y="119" width="20" height="37" xoffset="1" yoffset="2" xadvance="19" page="0"  chnl="15" />
+<char id="94" x="101" y="189" width="18" height="33" xoffset="1" yoffset="0" xadvance="18" page="0"  chnl="15" />
+<char id="123" x="498" y="118" width="14" height="39" xoffset="1" yoffset="0" xadvance="14" page="0"  chnl="15" />
+<char id="125" x="18" y="80" width="15" height="39" xoffset="0" yoffset="0" xadvance="14" page="0"  chnl="15" />
+<char id="95" x="304" y="191" width="19" height="15" xoffset="0" yoffset="24" xadvance="18" page="0"  chnl="15" />
+<char id="126" x="225" y="191" width="18" height="22" xoffset="0" yoffset="9" xadvance="18" page="0"  chnl="15" />
+<char id="34" x="252" y="118" width="10" height="38" xoffset="1" yoffset="1" xadvance="10" page="0"  chnl="15" />
+<char id="62" x="119" y="189" width="18" height="32" xoffset="1" yoffset="4" xadvance="18" page="0"  chnl="15" />
+<char id="60" x="137" y="189" width="18" height="32" xoffset="1" yoffset="4" xadvance="18" page="0"  chnl="15" />
+<char id="8211" x="280" y="191" width="16" height="20" xoffset="0" yoffset="9" xadvance="15" page="0"  chnl="15" />
+<char id="8212" x="255" y="191" width="25" height="20" xoffset="0" yoffset="9" xadvance="24" page="0"  chnl="15" />
+<char id="171" x="189" y="191" width="18" height="25" xoffset="1" yoffset="7" xadvance="19" page="0"  chnl="15" />
+<char id="187" x="207" y="191" width="18" height="25" xoffset="1" yoffset="7" xadvance="19" page="0"  chnl="15" />
+<char id="8220" x="434" y="118" width="11" height="39" xoffset="0" yoffset="0" xadvance="10" page="0"  chnl="15" />
+<char id="8221" x="423" y="118" width="11" height="39" xoffset="0" yoffset="0" xadvance="10" page="0"  chnl="15" />
+<char id="124" x="340" y="118" width="7" height="39" xoffset="3" yoffset="0" xadvance="8" page="0"  chnl="15" />
+<char id="1072" x="103" y="154" width="17" height="35" xoffset="0" yoffset="5" xadvance="16" page="0"  chnl="15" />
+<char id="1073" x="56" y="40" width="18" height="40" xoffset="1" yoffset="0" xadvance="17" page="0"  chnl="15" />
+<char id="1074" x="188" y="154" width="16" height="35" xoffset="2" yoffset="5" xadvance="16" page="0"  chnl="15" />
+<char id="1075" x="295" y="156" width="12" height="35" xoffset="2" yoffset="5" xadvance="13" page="0"  chnl="15" />
+<char id="1076" x="65" y="119" width="19" height="35" xoffset="0" yoffset="5" xadvance="17" page="0"  chnl="15" />
+<char id="1077" x="171" y="154" width="17" height="35" xoffset="0" yoffset="5" xadvance="16" page="0"  chnl="15" />
+<char id="1105" x="128" y="40" width="17" height="40" xoffset="0" yoffset="0" xadvance="16" page="0"  chnl="15" />
+<char id="1078" x="195" y="119" width="24" height="35" xoffset="0" yoffset="5" xadvance="23" page="0"  chnl="15" />
+<char id="1079" x="280" y="156" width="15" height="35" xoffset="0" yoffset="5" xadvance="14" page="0"  chnl="15" />
+<char id="1080" x="137" y="154" width="17" height="35" xoffset="2" yoffset="5" xadvance="18" page="0"  chnl="15" />
+<char id="1081" x="145" y="40" width="17" height="40" xoffset="2" yoffset="0" xadvance="18" page="0"  chnl="15" />
+<char id="1082" x="265" y="156" width="15" height="35" xoffset="2" yoffset="5" xadvance="15" page="0"  chnl="15" />
+<char id="1083" x="46" y="119" width="19" height="35" xoffset="0" yoffset="5" xadvance="17" page="0"  chnl="15" />
+<char id="1084" x="27" y="119" width="19" height="35" xoffset="2" yoffset="5" xadvance="20" page="0"  chnl="15" />
+<char id="1085" x="120" y="154" width="17" height="35" xoffset="2" yoffset="5" xadvance="18" page="0"  chnl="15" />
+<char id="1086" x="0" y="154" width="18" height="35" xoffset="0" yoffset="5" xadvance="17" page="0"  chnl="15" />
+<char id="1087" x="154" y="154" width="17" height="35" xoffset="2" yoffset="5" xadvance="18" page="0"  chnl="15" />
+<char id="1088" x="86" y="154" width="17" height="35" xoffset="2" yoffset="5" xadvance="17" page="0"  chnl="15" />
+<char id="1089" x="250" y="156" width="15" height="35" xoffset="0" yoffset="5" xadvance="14" page="0"  chnl="15" />
+<char id="1090" x="204" y="156" width="16" height="35" xoffset="0" yoffset="5" xadvance="14" page="0"  chnl="15" />
+<char id="1091" x="18" y="154" width="17" height="35" xoffset="0" yoffset="5" xadvance="15" page="0"  chnl="15" />
+<char id="1092" x="165" y="0" width="24" height="40" xoffset="0" yoffset="0" xadvance="24" page="0"  chnl="15" />
+<char id="1093" x="52" y="154" width="17" height="35" xoffset="0" yoffset="5" xadvance="15" page="0"  chnl="15" />
+<char id="1094" x="69" y="154" width="17" height="35" xoffset="2" yoffset="5" xadvance="18" page="0"  chnl="15" />
+<char id="1095" x="35" y="154" width="17" height="35" xoffset="1" yoffset="5" xadvance="17" page="0"  chnl="15" />
+<char id="1096" x="171" y="119" width="24" height="35" xoffset="2" yoffset="5" xadvance="24" page="0"  chnl="15" />
+<char id="1097" x="147" y="119" width="24" height="35" xoffset="2" yoffset="5" xadvance="25" page="0"  chnl="15" />
+<char id="1098" x="84" y="119" width="19" height="35" xoffset="0" yoffset="5" xadvance="18" page="0"  chnl="15" />
+<char id="1099" x="103" y="119" width="21" height="35" xoffset="2" yoffset="5" xadvance="22" page="0"  chnl="15" />
+<char id="1100" x="235" y="156" width="15" height="35" xoffset="2" yoffset="5" xadvance="16" page="0"  chnl="15" />
+<char id="1101" x="220" y="156" width="15" height="35" xoffset="0" yoffset="5" xadvance="15" page="0"  chnl="15" />
+<char id="1102" x="124" y="119" width="23" height="35" xoffset="2" yoffset="5" xadvance="24" page="0"  chnl="15" />
+<char id="1103" x="9" y="119" width="18" height="35" xoffset="0" yoffset="5" xadvance="16" page="0"  chnl="15" />
+<char id="1040" x="345" y="0" width="21" height="40" xoffset="0" yoffset="0" xadvance="19" page="0"  chnl="15" />
+<char id="1041" x="92" y="40" width="18" height="40" xoffset="2" yoffset="0" xadvance="18" page="0"  chnl="15" />
+<char id="1042" x="74" y="40" width="18" height="40" xoffset="2" yoffset="0" xadvance="18" page="0"  chnl="15" />
+<char id="1043" x="48" y="80" width="15" height="39" xoffset="2" yoffset="1" xadvance="16" page="0"  chnl="15" />
+<char id="1044" x="258" y="0" width="23" height="40" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1045" x="309" y="79" width="17" height="39" xoffset="2" yoffset="1" xadvance="17" page="0"  chnl="15" />
+<char id="1025" x="162" y="40" width="17" height="40" xoffset="2" yoffset="0" xadvance="17" page="0"  chnl="15" />
+<char id="1046" x="0" y="0" width="30" height="40" xoffset="0" yoffset="0" xadvance="28" page="0"  chnl="15" />
+<char id="1047" x="110" y="40" width="18" height="40" xoffset="0" yoffset="0" xadvance="17" page="0"  chnl="15" />
+<char id="1048" x="366" y="0" width="20" height="40" xoffset="2" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1049" x="406" y="0" width="20" height="40" xoffset="2" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1050" x="38" y="40" width="18" height="40" xoffset="2" yoffset="0" xadvance="19" page="0"  chnl="15" />
+<char id="1051" x="281" y="0" width="22" height="40" xoffset="0" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1052" x="235" y="0" width="23" height="40" xoffset="2" yoffset="0" xadvance="24" page="0"  chnl="15" />
+<char id="1053" x="486" y="0" width="20" height="40" xoffset="2" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1054" x="212" y="0" width="23" height="40" xoffset="1" yoffset="0" xadvance="22" page="0"  chnl="15" />
+<char id="1055" x="426" y="0" width="20" height="40" xoffset="2" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1056" x="196" y="40" width="16" height="40" xoffset="2" yoffset="0" xadvance="17" page="0"  chnl="15" />
+<char id="1057" x="0" y="40" width="19" height="40" xoffset="1" yoffset="0" xadvance="19" page="0"  chnl="15" />
+<char id="1058" x="422" y="40" width="20" height="39" xoffset="0" yoffset="1" xadvance="18" page="0"  chnl="15" />
+<char id="1059" x="386" y="0" width="20" height="40" xoffset="0" yoffset="0" xadvance="18" page="0"  chnl="15" />
+<char id="1060" x="117" y="0" width="24" height="40" xoffset="1" yoffset="0" xadvance="23" page="0"  chnl="15" />
+<char id="1061" x="19" y="40" width="19" height="40" xoffset="0" yoffset="0" xadvance="18" page="0"  chnl="15" />
+<char id="1063" x="466" y="0" width="20" height="40" xoffset="1" yoffset="0" xadvance="20" page="0"  chnl="15" />
+<char id="1062" x="303" y="0" width="21" height="40" xoffset="2" yoffset="0" xadvance="21" page="0"  chnl="15" />
+<char id="1064" x="88" y="0" width="29" height="40" xoffset="2" yoffset="0" xadvance="30" page="0"  chnl="15" />
+<char id="1065" x="59" y="0" width="29" height="40" xoffset="2" yoffset="0" xadvance="30" page="0"  chnl="15" />
+<char id="1066" x="189" y="0" width="23" height="40" xoffset="0" yoffset="0" xadvance="22" page="0"  chnl="15" />
+<char id="1067" x="141" y="0" width="24" height="40" xoffset="2" yoffset="0" xadvance="25" page="0"  chnl="15" />
+<char id="1068" x="179" y="40" width="17" height="40" xoffset="2" yoffset="0" xadvance="18" page="0"  chnl="15" />
+<char id="1069" x="446" y="0" width="20" height="40" xoffset="0" yoffset="0" xadvance="19" page="0"  chnl="15" />
+<char id="1070" x="30" y="0" width="29" height="40" xoffset="2" yoffset="0" xadvance="30" page="0"  chnl="15" />
+<char id="1071" x="324" y="0" width="21" height="40" xoffset="0" yoffset="0" xadvance="19" page="0"  chnl="15" />
+<char id="169" x="241" y="40" width="25" height="39" xoffset="1" yoffset="0" xadvance="25" page="0"  chnl="15" />
+<char id="174" x="266" y="40" width="25" height="39" xoffset="1" yoffset="0" xadvance="25" page="0"  chnl="15" />
+</chars> 
+<kernings count="910">
+<kerning first="97" second="118" amount="0.3125"/>
+<kerning first="97" second="119" amount="0.3125"/>
+<kerning first="97" second="121" amount="0.3125"/>
+<kerning first="97" second="84" amount="0.9375"/>
+<kerning first="97" second="86" amount="0.625"/>
+<kerning first="97" second="87" amount="0.625"/>
+<kerning first="97" second="63" amount="0.9375"/>
+<kerning first="98" second="118" amount="0.625"/>
+<kerning first="98" second="119" amount="0.625"/>
+<kerning first="98" second="120" amount="0.625"/>
+<kerning first="98" second="121" amount="0.625"/>
+<kerning first="98" second="122" amount="0.375"/>
+<kerning first="98" second="84" amount="1.9375"/>
+<kerning first="98" second="86" amount="1.625"/>
+<kerning first="98" second="87" amount="1.625"/>
+<kerning first="98" second="88" amount="1.25"/>
+<kerning first="98" second="89" amount="2.25"/>
+<kerning first="98" second="46" amount="0.9375"/>
+<kerning first="98" second="44" amount="0.9375"/>
+<kerning first="98" second="47" amount="1.625"/>
+<kerning first="99" second="118" amount="0.1875"/>
+<kerning first="99" second="119" amount="0.1875"/>
+<kerning first="99" second="121" amount="0.1875"/>
+<kerning first="101" second="118" amount="0.625"/>
+<kerning first="101" second="119" amount="0.625"/>
+<kerning first="101" second="120" amount="0.625"/>
+<kerning first="101" second="121" amount="0.625"/>
+<kerning first="101" second="122" amount="0.375"/>
+<kerning first="101" second="84" amount="1.9375"/>
+<kerning first="101" second="86" amount="1.625"/>
+<kerning first="101" second="87" amount="1.625"/>
+<kerning first="101" second="88" amount="1.25"/>
+<kerning first="101" second="89" amount="2.25"/>
+<kerning first="101" second="46" amount="0.9375"/>
+<kerning first="101" second="44" amount="0.9375"/>
+<kerning first="101" second="47" amount="0.625"/>
+<kerning first="102" second="97" amount="0.3125"/>
+<kerning first="102" second="99" amount="0.3125"/>
+<kerning first="102" second="100" amount="0.3125"/>
+<kerning first="102" second="101" amount="0.3125"/>
+<kerning first="102" second="102" amount="-1.125"/>
+<kerning first="102" second="103" amount="0.3125"/>
+<kerning first="102" second="111" amount="0.3125"/>
+<kerning first="102" second="113" amount="0.3125"/>
+<kerning first="102" second="116" amount="-1.0625"/>
+<kerning first="102" second="118" amount="-0.9375"/>
+<kerning first="102" second="119" amount="-0.9375"/>
+<kerning first="102" second="121" amount="-0.9375"/>
+<kerning first="102" second="46" amount="1.25"/>
+<kerning first="102" second="44" amount="1.25"/>
+<kerning first="102" second="47" amount="0.625"/>
+<kerning first="102" second="39" amount="-0.9375"/>
+<kerning first="102" second="34" amount="-0.9375"/>
+<kerning first="102" second="8220" amount="-0.9375"/>
+<kerning first="102" second="8221" amount="-0.9375"/>
+<kerning first="107" second="97" amount="0.625"/>
+<kerning first="107" second="99" amount="0.625"/>
+<kerning first="107" second="100" amount="0.625"/>
+<kerning first="107" second="101" amount="0.625"/>
+<kerning first="107" second="103" amount="0.625"/>
+<kerning first="107" second="111" amount="0.625"/>
+<kerning first="107" second="113" amount="0.625"/>
+<kerning first="107" second="118" amount="-0.3125"/>
+<kerning first="107" second="119" amount="-0.3125"/>
+<kerning first="107" second="121" amount="-0.3125"/>
+<kerning first="109" second="117" amount="0.125"/>
+<kerning first="110" second="117" amount="0.125"/>
+<kerning first="111" second="118" amount="0.625"/>
+<kerning first="111" second="119" amount="0.625"/>
+<kerning first="111" second="120" amount="0.625"/>
+<kerning first="111" second="121" amount="0.625"/>
+<kerning first="111" second="122" amount="0.375"/>
+<kerning first="111" second="84" amount="1.9375"/>
+<kerning first="111" second="86" amount="1.625"/>
+<kerning first="111" second="87" amount="1.625"/>
+<kerning first="111" second="88" amount="1.25"/>
+<kerning first="111" second="89" amount="2.25"/>
+<kerning first="111" second="46" amount="0.9375"/>
+<kerning first="111" second="44" amount="0.9375"/>
+<kerning first="111" second="47" amount="1.25"/>
+<kerning first="112" second="106" amount="0.3125"/>
+<kerning first="112" second="118" amount="0.625"/>
+<kerning first="112" second="119" amount="0.625"/>
+<kerning first="112" second="120" amount="0.625"/>
+<kerning first="112" second="121" amount="0.625"/>
+<kerning first="112" second="122" amount="0.375"/>
+<kerning first="112" second="65" amount="0.9375"/>
+<kerning first="112" second="84" amount="1.9375"/>
+<kerning first="112" second="86" amount="1.625"/>
+<kerning first="112" second="87" amount="1.625"/>
+<kerning first="112" second="88" amount="1.25"/>
+<kerning first="112" second="89" amount="2.25"/>
+<kerning first="112" second="46" amount="0.9375"/>
+<kerning first="112" second="44" amount="0.9375"/>
+<kerning first="114" second="97" amount="0.625"/>
+<kerning first="114" second="99" amount="0.625"/>
+<kerning first="114" second="100" amount="0.625"/>
+<kerning first="114" second="101" amount="0.625"/>
+<kerning first="114" second="102" amount="-0.3125"/>
+<kerning first="114" second="103" amount="0.625"/>
+<kerning first="114" second="111" amount="0.625"/>
+<kerning first="114" second="113" amount="0.625"/>
+<kerning first="114" second="116" amount="-0.3125"/>
+<kerning first="114" second="47" amount="1.9375"/>
+<kerning first="115" second="89" amount="0.9375"/>
+<kerning first="115" second="47" amount="0.625"/>
+<kerning first="116" second="102" amount="-0.5625"/>
+<kerning first="116" second="116" amount="-0.625"/>
+<kerning first="116" second="39" amount="-0.3125"/>
+<kerning first="116" second="34" amount="-0.3125"/>
+<kerning first="116" second="8220" amount="-0.3125"/>
+<kerning first="116" second="8221" amount="-0.3125"/>
+<kerning first="117" second="84" amount="0.625"/>
+<kerning first="118" second="97" amount="0.5"/>
+<kerning first="118" second="99" amount="0.625"/>
+<kerning first="118" second="100" amount="0.625"/>
+<kerning first="118" second="101" amount="0.625"/>
+<kerning first="118" second="102" amount="-0.625"/>
+<kerning first="118" second="103" amount="0.625"/>
+<kerning first="118" second="111" amount="0.625"/>
+<kerning first="118" second="113" amount="0.625"/>
+<kerning first="118" second="116" amount="-0.625"/>
+<kerning first="118" second="118" amount="-0.625"/>
+<kerning first="118" second="119" amount="-0.625"/>
+<kerning first="118" second="120" amount="-0.625"/>
+<kerning first="118" second="121" amount="-0.625"/>
+<kerning first="118" second="65" amount="1.625"/>
+<kerning first="118" second="74" amount="0.9375"/>
+<kerning first="118" second="46" amount="1.625"/>
+<kerning first="118" second="44" amount="1.625"/>
+<kerning first="118" second="47" amount="0.9375"/>
+<kerning first="118" second="39" amount="-0.625"/>
+<kerning first="118" second="34" amount="-0.625"/>
+<kerning first="118" second="8220" amount="-0.625"/>
+<kerning first="118" second="8221" amount="-0.625"/>
+<kerning first="119" second="97" amount="0.5"/>
+<kerning first="119" second="99" amount="0.625"/>
+<kerning first="119" second="100" amount="0.625"/>
+<kerning first="119" second="101" amount="0.625"/>
+<kerning first="119" second="102" amount="-0.625"/>
+<kerning first="119" second="103" amount="0.625"/>
+<kerning first="119" second="111" amount="0.625"/>
+<kerning first="119" second="113" amount="0.625"/>
+<kerning first="119" second="116" amount="-0.625"/>
+<kerning first="119" second="118" amount="-0.625"/>
+<kerning first="119" second="119" amount="-0.625"/>
+<kerning first="119" second="120" amount="-0.625"/>
+<kerning first="119" second="121" amount="-0.625"/>
+<kerning first="119" second="65" amount="1.625"/>
+<kerning first="119" second="74" amount="0.9375"/>
+<kerning first="119" second="46" amount="1.625"/>
+<kerning first="119" second="44" amount="1.625"/>
+<kerning first="119" second="47" amount="0.9375"/>
+<kerning first="119" second="39" amount="-0.625"/>
+<kerning first="119" second="34" amount="-0.625"/>
+<kerning first="119" second="8220" amount="-0.625"/>
+<kerning first="119" second="8221" amount="-0.625"/>
+<kerning first="120" second="97" amount="0.625"/>
+<kerning first="120" second="99" amount="0.625"/>
+<kerning first="120" second="100" amount="0.625"/>
+<kerning first="120" second="101" amount="0.625"/>
+<kerning first="120" second="103" amount="0.625"/>
+<kerning first="120" second="111" amount="0.625"/>
+<kerning first="120" second="113" amount="0.625"/>
+<kerning first="120" second="118" amount="-0.625"/>
+<kerning first="120" second="119" amount="-0.625"/>
+<kerning first="120" second="121" amount="-0.625"/>
+<kerning first="120" second="39" amount="-0.3125"/>
+<kerning first="120" second="34" amount="-0.3125"/>
+<kerning first="120" second="8220" amount="-0.3125"/>
+<kerning first="120" second="8221" amount="-0.3125"/>
+<kerning first="121" second="97" amount="0.5"/>
+<kerning first="121" second="99" amount="0.625"/>
+<kerning first="121" second="100" amount="0.625"/>
+<kerning first="121" second="101" amount="0.625"/>
+<kerning first="121" second="102" amount="-0.625"/>
+<kerning first="121" second="103" amount="0.625"/>
+<kerning first="121" second="111" amount="0.625"/>
+<kerning first="121" second="113" amount="0.625"/>
+<kerning first="121" second="116" amount="-0.625"/>
+<kerning first="121" second="118" amount="-0.625"/>
+<kerning first="121" second="119" amount="-0.625"/>
+<kerning first="121" second="120" amount="-0.625"/>
+<kerning first="121" second="121" amount="-0.625"/>
+<kerning first="121" second="65" amount="1.625"/>
+<kerning first="121" second="74" amount="0.9375"/>
+<kerning first="121" second="46" amount="1.625"/>
+<kerning first="121" second="44" amount="1.625"/>
+<kerning first="121" second="47" amount="0.9375"/>
+<kerning first="121" second="39" amount="-0.625"/>
+<kerning first="121" second="34" amount="-0.625"/>
+<kerning first="121" second="8220" amount="-0.625"/>
+<kerning first="121" second="8221" amount="-0.625"/>
+<kerning first="122" second="97" amount="0.375"/>
+<kerning first="122" second="99" amount="0.375"/>
+<kerning first="122" second="100" amount="0.375"/>
+<kerning first="122" second="101" amount="0.375"/>
+<kerning first="122" second="103" amount="0.375"/>
+<kerning first="122" second="111" amount="0.375"/>
+<kerning first="122" second="113" amount="0.375"/>
+<kerning first="65" second="97" amount="0.3125"/>
+<kerning first="65" second="99" amount="0.625"/>
+<kerning first="65" second="100" amount="0.625"/>
+<kerning first="65" second="101" amount="0.625"/>
+<kerning first="65" second="103" amount="0.75"/>
+<kerning first="65" second="111" amount="0.625"/>
+<kerning first="65" second="113" amount="0.75"/>
+<kerning first="65" second="117" amount="0.5625"/>
+<kerning first="65" second="118" amount="1.625"/>
+<kerning first="65" second="119" amount="1.625"/>
+<kerning first="65" second="120" amount="-0.3125"/>
+<kerning first="65" second="121" amount="1.625"/>
+<kerning first="65" second="67" amount="0.625"/>
+<kerning first="65" second="71" amount="0.625"/>
+<kerning first="65" second="74" amount="-0.9375"/>
+<kerning first="65" second="79" amount="0.625"/>
+<kerning first="65" second="81" amount="0.625"/>
+<kerning first="65" second="84" amount="2.25"/>
+<kerning first="65" second="85" amount="0.9375"/>
+<kerning first="65" second="86" amount="1.9375"/>
+<kerning first="65" second="87" amount="1.9375"/>
+<kerning first="65" second="89" amount="2.25"/>
+<kerning first="65" second="63" amount="1.9375"/>
+<kerning first="65" second="45" amount="0.625"/>
+<kerning first="65" second="39" amount="1.625"/>
+<kerning first="65" second="34" amount="1.625"/>
+<kerning first="65" second="8211" amount="0.625"/>
+<kerning first="65" second="8212" amount="0.625"/>
+<kerning first="65" second="171" amount="0.625"/>
+<kerning first="65" second="187" amount="0.625"/>
+<kerning first="65" second="8220" amount="1.625"/>
+<kerning first="65" second="8221" amount="1.625"/>
+<kerning first="66" second="65" amount="-0.1875"/>
+<kerning first="66" second="74" amount="0.625"/>
+<kerning first="66" second="84" amount="0.625"/>
+<kerning first="66" second="86" amount="1.0625"/>
+<kerning first="66" second="87" amount="1.0625"/>
+<kerning first="66" second="88" amount="0.625"/>
+<kerning first="66" second="89" amount="1.4375"/>
+<kerning first="66" second="90" amount="0.3125"/>
+<kerning first="66" second="46" amount="0.3125"/>
+<kerning first="66" second="44" amount="0.3125"/>
+<kerning first="66" second="47" amount="1.9375"/>
+<kerning first="66" second="39" amount="0.625"/>
+<kerning first="66" second="34" amount="0.625"/>
+<kerning first="66" second="8220" amount="0.625"/>
+<kerning first="66" second="8221" amount="0.625"/>
+<kerning first="67" second="97" amount="0.3125"/>
+<kerning first="67" second="111" amount="0.9375"/>
+<kerning first="67" second="46" amount="0.3125"/>
+<kerning first="67" second="44" amount="0.3125"/>
+<kerning first="67" second="45" amount="0.9375"/>
+<kerning first="67" second="47" amount="0.9375"/>
+<kerning first="67" second="8211" amount="0.9375"/>
+<kerning first="67" second="8212" amount="0.9375"/>
+<kerning first="67" second="171" amount="0.9375"/>
+<kerning first="67" second="187" amount="0.9375"/>
+<kerning first="68" second="65" amount="0.875"/>
+<kerning first="68" second="74" amount="0.625"/>
+<kerning first="68" second="84" amount="0.625"/>
+<kerning first="68" second="86" amount="0.6875"/>
+<kerning first="68" second="87" amount="0.6875"/>
+<kerning first="68" second="88" amount="0.625"/>
+<kerning first="68" second="89" amount="1.5"/>
+<kerning first="68" second="90" amount="0.3125"/>
+<kerning first="68" second="46" amount="1.4375"/>
+<kerning first="68" second="44" amount="1.4375"/>
+<kerning first="68" second="47" amount="1.9375"/>
+<kerning first="68" second="39" amount="0.625"/>
+<kerning first="68" second="34" amount="0.625"/>
+<kerning first="68" second="8220" amount="0.625"/>
+<kerning first="68" second="8221" amount="0.625"/>
+<kerning first="69" second="103" amount="0.3125"/>
+<kerning first="69" second="111" amount="0.3125"/>
+<kerning first="69" second="113" amount="0.3125"/>
+<kerning first="69" second="117" amount="0.3125"/>
+<kerning first="69" second="118" amount="0.3125"/>
+<kerning first="69" second="119" amount="0.3125"/>
+<kerning first="69" second="121" amount="0.3125"/>
+<kerning first="70" second="97" amount="1.0625"/>
+<kerning first="70" second="99" amount="1.625"/>
+<kerning first="70" second="100" amount="1.625"/>
+<kerning first="70" second="101" amount="1.625"/>
+<kerning first="70" second="103" amount="1.625"/>
+<kerning first="70" second="109" amount="0.3125"/>
+<kerning first="70" second="110" amount="0.3125"/>
+<kerning first="70" second="111" amount="1.625"/>
+<kerning first="70" second="113" amount="1.625"/>
+<kerning first="70" second="114" amount="0.3125"/>
+<kerning first="70" second="115" amount="0.625"/>
+<kerning first="70" second="118" amount="0.3125"/>
+<kerning first="70" second="119" amount="0.3125"/>
+<kerning first="70" second="121" amount="0.3125"/>
+<kerning first="70" second="65" amount="1.625"/>
+<kerning first="70" second="67" amount="0.75"/>
+<kerning first="70" second="71" amount="0.75"/>
+<kerning first="70" second="74" amount="1.9375"/>
+<kerning first="70" second="79" amount="0.75"/>
+<kerning first="70" second="81" amount="0.75"/>
+<kerning first="70" second="86" amount="-0.625"/>
+<kerning first="70" second="87" amount="-0.625"/>
+<kerning first="70" second="89" amount="-0.625"/>
+<kerning first="70" second="46" amount="1.9375"/>
+<kerning first="70" second="44" amount="1.9375"/>
+<kerning first="70" second="45" amount="0.3125"/>
+<kerning first="70" second="47" amount="2.5625"/>
+<kerning first="70" second="39" amount="-0.625"/>
+<kerning first="70" second="34" amount="-0.625"/>
+<kerning first="70" second="8211" amount="0.3125"/>
+<kerning first="70" second="8212" amount="0.3125"/>
+<kerning first="70" second="171" amount="0.3125"/>
+<kerning first="70" second="187" amount="0.3125"/>
+<kerning first="70" second="8220" amount="-0.625"/>
+<kerning first="70" second="8221" amount="-0.625"/>
+<kerning first="71" second="65" amount="0.4375"/>
+<kerning first="71" second="74" amount="0.625"/>
+<kerning first="71" second="84" amount="0.625"/>
+<kerning first="71" second="86" amount="0.5625"/>
+<kerning first="71" second="87" amount="0.5625"/>
+<kerning first="71" second="88" amount="0.625"/>
+<kerning first="71" second="89" amount="0.9375"/>
+<kerning first="71" second="90" amount="0.3125"/>
+<kerning first="71" second="46" amount="1.25"/>
+<kerning first="71" second="44" amount="1.25"/>
+<kerning first="71" second="47" amount="1.9375"/>
+<kerning first="71" second="39" amount="0.625"/>
+<kerning first="71" second="34" amount="0.625"/>
+<kerning first="71" second="8220" amount="0.625"/>
+<kerning first="71" second="8221" amount="0.625"/>
+<kerning first="74" second="65" amount="0.8125"/>
+<kerning first="74" second="46" amount="1.25"/>
+<kerning first="74" second="44" amount="1.25"/>
+<kerning first="74" second="47" amount="1.25"/>
+<kerning first="75" second="97" amount="0.9375"/>
+<kerning first="75" second="99" amount="0.9375"/>
+<kerning first="75" second="100" amount="0.9375"/>
+<kerning first="75" second="101" amount="0.9375"/>
+<kerning first="75" second="103" amount="0.9375"/>
+<kerning first="75" second="111" amount="0.9375"/>
+<kerning first="75" second="113" amount="0.9375"/>
+<kerning first="75" second="117" amount="0.4375"/>
+<kerning first="75" second="118" amount="0.9375"/>
+<kerning first="75" second="119" amount="0.9375"/>
+<kerning first="75" second="121" amount="0.9375"/>
+<kerning first="75" second="67" amount="0.9375"/>
+<kerning first="75" second="71" amount="0.9375"/>
+<kerning first="75" second="79" amount="0.9375"/>
+<kerning first="75" second="81" amount="0.9375"/>
+<kerning first="75" second="85" amount="0.25"/>
+<kerning first="75" second="45" amount="1.625"/>
+<kerning first="75" second="8211" amount="1.625"/>
+<kerning first="75" second="8212" amount="1.625"/>
+<kerning first="75" second="171" amount="1.625"/>
+<kerning first="75" second="187" amount="1.625"/>
+<kerning first="76" second="97" amount="0.625"/>
+<kerning first="76" second="99" amount="0.625"/>
+<kerning first="76" second="100" amount="0.625"/>
+<kerning first="76" second="101" amount="0.625"/>
+<kerning first="76" second="103" amount="0.625"/>
+<kerning first="76" second="111" amount="0.625"/>
+<kerning first="76" second="113" amount="0.625"/>
+<kerning first="76" second="118" amount="1.25"/>
+<kerning first="76" second="119" amount="1.25"/>
+<kerning first="76" second="121" amount="1.25"/>
+<kerning first="76" second="67" amount="0.625"/>
+<kerning first="76" second="71" amount="0.625"/>
+<kerning first="76" second="79" amount="0.625"/>
+<kerning first="76" second="81" amount="0.625"/>
+<kerning first="76" second="84" amount="2.875"/>
+<kerning first="76" second="86" amount="1.9375"/>
+<kerning first="76" second="87" amount="1.9375"/>
+<kerning first="76" second="89" amount="1.9375"/>
+<kerning first="76" second="63" amount="2.25"/>
+<kerning first="76" second="45" amount="1.625"/>
+<kerning first="76" second="39" amount="2.5625"/>
+<kerning first="76" second="34" amount="2.5625"/>
+<kerning first="76" second="8211" amount="1.625"/>
+<kerning first="76" second="8212" amount="1.625"/>
+<kerning first="76" second="171" amount="1.625"/>
+<kerning first="76" second="187" amount="1.625"/>
+<kerning first="76" second="8220" amount="2.5625"/>
+<kerning first="76" second="8221" amount="2.5625"/>
+<kerning first="79" second="65" amount="0.625"/>
+<kerning first="79" second="74" amount="0.625"/>
+<kerning first="79" second="84" amount="0.625"/>
+<kerning first="79" second="86" amount="0.625"/>
+<kerning first="79" second="87" amount="0.625"/>
+<kerning first="79" second="88" amount="0.625"/>
+<kerning first="79" second="89" amount="0.9375"/>
+<kerning first="79" second="90" amount="0.3125"/>
+<kerning first="79" second="46" amount="1.25"/>
+<kerning first="79" second="44" amount="1.25"/>
+<kerning first="79" second="47" amount="1.9375"/>
+<kerning first="79" second="39" amount="0.625"/>
+<kerning first="79" second="34" amount="0.625"/>
+<kerning first="79" second="8220" amount="0.625"/>
+<kerning first="79" second="8221" amount="0.625"/>
+<kerning first="80" second="97" amount="0.375"/>
+<kerning first="80" second="65" amount="1.9375"/>
+<kerning first="80" second="74" amount="2.875"/>
+<kerning first="80" second="84" amount="0.625"/>
+<kerning first="80" second="86" amount="0.4375"/>
+<kerning first="80" second="87" amount="0.4375"/>
+<kerning first="80" second="88" amount="0.625"/>
+<kerning first="80" second="89" amount="0.9375"/>
+<kerning first="80" second="90" amount="0.3125"/>
+<kerning first="80" second="46" amount="1.9375"/>
+<kerning first="80" second="44" amount="1.9375"/>
+<kerning first="80" second="47" amount="3.1875"/>
+<kerning first="80" second="39" amount="0.625"/>
+<kerning first="80" second="34" amount="0.625"/>
+<kerning first="80" second="8220" amount="0.625"/>
+<kerning first="80" second="8221" amount="0.625"/>
+<kerning first="81" second="65" amount="0.625"/>
+<kerning first="81" second="74" amount="0.625"/>
+<kerning first="81" second="84" amount="0.625"/>
+<kerning first="81" second="86" amount="0.625"/>
+<kerning first="81" second="87" amount="0.625"/>
+<kerning first="81" second="88" amount="0.625"/>
+<kerning first="81" second="89" amount="0.9375"/>
+<kerning first="81" second="90" amount="0.3125"/>
+<kerning first="81" second="46" amount="1.25"/>
+<kerning first="81" second="44" amount="1.25"/>
+<kerning first="81" second="47" amount="1.9375"/>
+<kerning first="81" second="39" amount="0.625"/>
+<kerning first="81" second="34" amount="0.625"/>
+<kerning first="81" second="8220" amount="0.625"/>
+<kerning first="81" second="8221" amount="0.625"/>
+<kerning first="82" second="97" amount="0.625"/>
+<kerning first="82" second="99" amount="0.625"/>
+<kerning first="82" second="100" amount="0.625"/>
+<kerning first="82" second="101" amount="0.625"/>
+<kerning first="82" second="103" amount="0.625"/>
+<kerning first="82" second="111" amount="0.625"/>
+<kerning first="82" second="113" amount="0.625"/>
+<kerning first="82" second="79" amount="0.3125"/>
+<kerning first="82" second="81" amount="0.3125"/>
+<kerning first="82" second="84" amount="0.4375"/>
+<kerning first="82" second="86" amount="0.3125"/>
+<kerning first="82" second="87" amount="0.3125"/>
+<kerning first="82" second="89" amount="0.3125"/>
+<kerning first="83" second="65" amount="0.25"/>
+<kerning first="83" second="89" amount="0.6875"/>
+<kerning first="83" second="46" amount="0.5625"/>
+<kerning first="83" second="44" amount="0.5625"/>
+<kerning first="83" second="45" amount="0.3125"/>
+<kerning first="83" second="47" amount="0.625"/>
+<kerning first="83" second="8211" amount="0.3125"/>
+<kerning first="83" second="8212" amount="0.3125"/>
+<kerning first="83" second="171" amount="0.3125"/>
+<kerning first="83" second="187" amount="0.3125"/>
+<kerning first="84" second="97" amount="1.9375"/>
+<kerning first="84" second="99" amount="1.9375"/>
+<kerning first="84" second="100" amount="1.9375"/>
+<kerning first="84" second="101" amount="1.9375"/>
+<kerning first="84" second="103" amount="1.9375"/>
+<kerning first="84" second="111" amount="1.9375"/>
+<kerning first="84" second="113" amount="1.9375"/>
+<kerning first="84" second="114" amount="0.625"/>
+<kerning first="84" second="117" amount="0.625"/>
+<kerning first="84" second="122" amount="0.625"/>
+<kerning first="84" second="65" amount="2.25"/>
+<kerning first="84" second="67" amount="0.625"/>
+<kerning first="84" second="71" amount="0.625"/>
+<kerning first="84" second="74" amount="2.25"/>
+<kerning first="84" second="79" amount="0.625"/>
+<kerning first="84" second="81" amount="0.625"/>
+<kerning first="84" second="84" amount="-0.625"/>
+<kerning first="84" second="86" amount="-0.625"/>
+<kerning first="84" second="87" amount="-0.625"/>
+<kerning first="84" second="89" amount="-0.625"/>
+<kerning first="84" second="46" amount="2.5625"/>
+<kerning first="84" second="44" amount="2.5625"/>
+<kerning first="84" second="45" amount="1.625"/>
+<kerning first="84" second="47" amount="2.5625"/>
+<kerning first="84" second="39" amount="-0.9375"/>
+<kerning first="84" second="34" amount="-0.9375"/>
+<kerning first="84" second="8211" amount="1.625"/>
+<kerning first="84" second="8212" amount="1.625"/>
+<kerning first="84" second="171" amount="1.625"/>
+<kerning first="84" second="187" amount="1.625"/>
+<kerning first="84" second="8220" amount="-0.9375"/>
+<kerning first="84" second="8221" amount="-0.9375"/>
+<kerning first="85" second="65" amount="0.9375"/>
+<kerning first="85" second="46" amount="1.25"/>
+<kerning first="85" second="44" amount="1.25"/>
+<kerning first="85" second="47" amount="1.625"/>
+<kerning first="86" second="97" amount="1.625"/>
+<kerning first="86" second="99" amount="1.625"/>
+<kerning first="86" second="100" amount="1.625"/>
+<kerning first="86" second="101" amount="1.625"/>
+<kerning first="86" second="103" amount="1.625"/>
+<kerning first="86" second="111" amount="1.625"/>
+<kerning first="86" second="113" amount="1.625"/>
+<kerning first="86" second="65" amount="1.9375"/>
+<kerning first="86" second="67" amount="0.625"/>
+<kerning first="86" second="71" amount="0.875"/>
+<kerning first="86" second="74" amount="1.625"/>
+<kerning first="86" second="79" amount="0.625"/>
+<kerning first="86" second="81" amount="0.625"/>
+<kerning first="86" second="84" amount="-0.625"/>
+<kerning first="86" second="86" amount="-0.625"/>
+<kerning first="86" second="87" amount="-0.625"/>
+<kerning first="86" second="89" amount="-0.625"/>
+<kerning first="86" second="46" amount="2.25"/>
+<kerning first="86" second="44" amount="2.25"/>
+<kerning first="86" second="45" amount="0.625"/>
+<kerning first="86" second="47" amount="3.1875"/>
+<kerning first="86" second="39" amount="-0.625"/>
+<kerning first="86" second="34" amount="-0.625"/>
+<kerning first="86" second="8211" amount="0.625"/>
+<kerning first="86" second="8212" amount="0.625"/>
+<kerning first="86" second="171" amount="0.625"/>
+<kerning first="86" second="187" amount="0.625"/>
+<kerning first="86" second="8220" amount="-0.625"/>
+<kerning first="86" second="8221" amount="-0.625"/>
+<kerning first="87" second="97" amount="1.625"/>
+<kerning first="87" second="99" amount="1.625"/>
+<kerning first="87" second="100" amount="1.625"/>
+<kerning first="87" second="101" amount="1.625"/>
+<kerning first="87" second="103" amount="1.625"/>
+<kerning first="87" second="111" amount="1.625"/>
+<kerning first="87" second="113" amount="1.625"/>
+<kerning first="87" second="65" amount="1.9375"/>
+<kerning first="87" second="67" amount="0.625"/>
+<kerning first="87" second="71" amount="0.875"/>
+<kerning first="87" second="74" amount="1.625"/>
+<kerning first="87" second="79" amount="0.625"/>
+<kerning first="87" second="81" amount="0.625"/>
+<kerning first="87" second="84" amount="-0.625"/>
+<kerning first="87" second="86" amount="-0.625"/>
+<kerning first="87" second="87" amount="-0.625"/>
+<kerning first="87" second="89" amount="-0.625"/>
+<kerning first="87" second="46" amount="2.25"/>
+<kerning first="87" second="44" amount="2.25"/>
+<kerning first="87" second="45" amount="0.625"/>
+<kerning first="87" second="47" amount="3.1875"/>
+<kerning first="87" second="39" amount="-0.625"/>
+<kerning first="87" second="34" amount="-0.625"/>
+<kerning first="87" second="8211" amount="0.625"/>
+<kerning first="87" second="8212" amount="0.625"/>
+<kerning first="87" second="171" amount="0.625"/>
+<kerning first="87" second="187" amount="0.625"/>
+<kerning first="87" second="8220" amount="-0.625"/>
+<kerning first="87" second="8221" amount="-0.625"/>
+<kerning first="88" second="97" amount="1.25"/>
+<kerning first="88" second="99" amount="1.25"/>
+<kerning first="88" second="100" amount="1.25"/>
+<kerning first="88" second="101" amount="1.25"/>
+<kerning first="88" second="103" amount="1.25"/>
+<kerning first="88" second="111" amount="1.25"/>
+<kerning first="88" second="113" amount="1.25"/>
+<kerning first="88" second="118" amount="0.625"/>
+<kerning first="88" second="119" amount="0.625"/>
+<kerning first="88" second="121" amount="0.625"/>
+<kerning first="88" second="67" amount="0.625"/>
+<kerning first="88" second="71" amount="0.625"/>
+<kerning first="88" second="79" amount="0.625"/>
+<kerning first="88" second="81" amount="0.625"/>
+<kerning first="88" second="45" amount="1.625"/>
+<kerning first="88" second="8211" amount="1.625"/>
+<kerning first="88" second="8212" amount="1.625"/>
+<kerning first="88" second="171" amount="1.625"/>
+<kerning first="88" second="187" amount="1.625"/>
+<kerning first="89" second="97" amount="2.25"/>
+<kerning first="89" second="99" amount="2.25"/>
+<kerning first="89" second="100" amount="2.25"/>
+<kerning first="89" second="101" amount="2.25"/>
+<kerning first="89" second="103" amount="2.25"/>
+<kerning first="89" second="111" amount="2.25"/>
+<kerning first="89" second="113" amount="2.25"/>
+<kerning first="89" second="115" amount="1.25"/>
+<kerning first="89" second="117" amount="0.625"/>
+<kerning first="89" second="65" amount="2.25"/>
+<kerning first="89" second="67" amount="1.125"/>
+<kerning first="89" second="71" amount="0.9375"/>
+<kerning first="89" second="74" amount="2.5625"/>
+<kerning first="89" second="79" amount="0.9375"/>
+<kerning first="89" second="81" amount="0.9375"/>
+<kerning first="89" second="83" amount="0.375"/>
+<kerning first="89" second="84" amount="-0.625"/>
+<kerning first="89" second="86" amount="-0.625"/>
+<kerning first="89" second="87" amount="-0.625"/>
+<kerning first="89" second="89" amount="-0.625"/>
+<kerning first="89" second="46" amount="1.9375"/>
+<kerning first="89" second="44" amount="1.9375"/>
+<kerning first="89" second="45" amount="1.25"/>
+<kerning first="89" second="47" amount="2.5625"/>
+<kerning first="89" second="38" amount="0.9375"/>
+<kerning first="89" second="39" amount="-0.6875"/>
+<kerning first="89" second="34" amount="-0.6875"/>
+<kerning first="89" second="8211" amount="1.25"/>
+<kerning first="89" second="8212" amount="1.25"/>
+<kerning first="89" second="171" amount="1.25"/>
+<kerning first="89" second="187" amount="1.25"/>
+<kerning first="89" second="8220" amount="-0.6875"/>
+<kerning first="89" second="8221" amount="-0.6875"/>
+<kerning first="90" second="97" amount="0.5"/>
+<kerning first="90" second="99" amount="0.5"/>
+<kerning first="90" second="100" amount="0.5"/>
+<kerning first="90" second="101" amount="0.5"/>
+<kerning first="90" second="103" amount="0.5"/>
+<kerning first="90" second="111" amount="0.5"/>
+<kerning first="90" second="113" amount="0.5"/>
+<kerning first="90" second="67" amount="0.3125"/>
+<kerning first="90" second="71" amount="0.3125"/>
+<kerning first="90" second="79" amount="0.3125"/>
+<kerning first="90" second="81" amount="0.3125"/>
+<kerning first="90" second="45" amount="0.9375"/>
+<kerning first="90" second="8211" amount="0.9375"/>
+<kerning first="90" second="8212" amount="0.9375"/>
+<kerning first="90" second="171" amount="0.9375"/>
+<kerning first="90" second="187" amount="0.9375"/>
+<kerning first="51" second="55" amount="0.3125"/>
+<kerning first="51" second="46" amount="0.3125"/>
+<kerning first="51" second="44" amount="0.3125"/>
+<kerning first="52" second="55" amount="0.3125"/>
+<kerning first="52" second="46" amount="0.3125"/>
+<kerning first="52" second="44" amount="0.3125"/>
+<kerning first="53" second="46" amount="0.625"/>
+<kerning first="53" second="44" amount="0.625"/>
+<kerning first="54" second="55" amount="0.625"/>
+<kerning first="54" second="46" amount="0.3125"/>
+<kerning first="54" second="44" amount="0.3125"/>
+<kerning first="55" second="48" amount="0.9375"/>
+<kerning first="55" second="52" amount="1.25"/>
+<kerning first="55" second="54" amount="0.625"/>
+<kerning first="55" second="56" amount="0.625"/>
+<kerning first="55" second="46" amount="2.875"/>
+<kerning first="55" second="44" amount="2.875"/>
+<kerning first="56" second="55" amount="0.9375"/>
+<kerning first="56" second="46" amount="0.3125"/>
+<kerning first="56" second="44" amount="0.3125"/>
+<kerning first="57" second="55" amount="0.3125"/>
+<kerning first="57" second="46" amount="0.9375"/>
+<kerning first="57" second="44" amount="0.9375"/>
+<kerning first="46" second="97" amount="0.9375"/>
+<kerning first="46" second="99" amount="0.9375"/>
+<kerning first="46" second="100" amount="0.9375"/>
+<kerning first="46" second="101" amount="0.9375"/>
+<kerning first="46" second="103" amount="0.9375"/>
+<kerning first="46" second="111" amount="0.9375"/>
+<kerning first="46" second="113" amount="0.9375"/>
+<kerning first="46" second="118" amount="1.625"/>
+<kerning first="46" second="119" amount="1.625"/>
+<kerning first="46" second="121" amount="1.625"/>
+<kerning first="46" second="67" amount="1.25"/>
+<kerning first="46" second="71" amount="1.625"/>
+<kerning first="46" second="79" amount="1.25"/>
+<kerning first="46" second="81" amount="1.25"/>
+<kerning first="46" second="83" amount="0.4375"/>
+<kerning first="46" second="84" amount="2.5625"/>
+<kerning first="46" second="85" amount="1.25"/>
+<kerning first="46" second="86" amount="2.25"/>
+<kerning first="46" second="87" amount="2.25"/>
+<kerning first="46" second="89" amount="1.9375"/>
+<kerning first="46" second="49" amount="0.625"/>
+<kerning first="46" second="52" amount="0.3125"/>
+<kerning first="46" second="54" amount="0.9375"/>
+<kerning first="46" second="55" amount="1.9375"/>
+<kerning first="46" second="56" amount="0.3125"/>
+<kerning first="46" second="57" amount="1.25"/>
+<kerning first="44" second="97" amount="0.9375"/>
+<kerning first="44" second="99" amount="0.9375"/>
+<kerning first="44" second="100" amount="0.9375"/>
+<kerning first="44" second="101" amount="0.9375"/>
+<kerning first="44" second="103" amount="0.9375"/>
+<kerning first="44" second="111" amount="0.9375"/>
+<kerning first="44" second="113" amount="0.9375"/>
+<kerning first="44" second="118" amount="1.625"/>
+<kerning first="44" second="119" amount="1.625"/>
+<kerning first="44" second="121" amount="1.625"/>
+<kerning first="44" second="67" amount="1.25"/>
+<kerning first="44" second="71" amount="1.625"/>
+<kerning first="44" second="79" amount="1.25"/>
+<kerning first="44" second="81" amount="1.25"/>
+<kerning first="44" second="83" amount="0.4375"/>
+<kerning first="44" second="84" amount="2.5625"/>
+<kerning first="44" second="85" amount="1.25"/>
+<kerning first="44" second="86" amount="2.25"/>
+<kerning first="44" second="87" amount="2.25"/>
+<kerning first="44" second="89" amount="1.9375"/>
+<kerning first="44" second="49" amount="0.625"/>
+<kerning first="44" second="52" amount="0.3125"/>
+<kerning first="44" second="54" amount="0.9375"/>
+<kerning first="44" second="55" amount="1.9375"/>
+<kerning first="44" second="56" amount="0.3125"/>
+<kerning first="44" second="57" amount="1.25"/>
+<kerning first="45" second="97" amount="0.3125"/>
+<kerning first="45" second="65" amount="0.625"/>
+<kerning first="45" second="83" amount="0.625"/>
+<kerning first="45" second="84" amount="1.625"/>
+<kerning first="45" second="86" amount="0.625"/>
+<kerning first="45" second="87" amount="0.625"/>
+<kerning first="45" second="88" amount="1.625"/>
+<kerning first="45" second="89" amount="0.9375"/>
+<kerning first="45" second="90" amount="0.9375"/>
+<kerning first="47" second="97" amount="2.25"/>
+<kerning first="47" second="99" amount="2.25"/>
+<kerning first="47" second="100" amount="2.25"/>
+<kerning first="47" second="101" amount="2.25"/>
+<kerning first="47" second="103" amount="2.25"/>
+<kerning first="47" second="109" amount="1.25"/>
+<kerning first="47" second="110" amount="1.25"/>
+<kerning first="47" second="111" amount="2.25"/>
+<kerning first="47" second="112" amount="1.25"/>
+<kerning first="47" second="113" amount="2.25"/>
+<kerning first="47" second="114" amount="1.25"/>
+<kerning first="47" second="115" amount="0.9375"/>
+<kerning first="47" second="117" amount="0.9375"/>
+<kerning first="47" second="120" amount="0.3125"/>
+<kerning first="47" second="122" amount="0.625"/>
+<kerning first="47" second="65" amount="1.9375"/>
+<kerning first="47" second="67" amount="1.9375"/>
+<kerning first="47" second="71" amount="1.9375"/>
+<kerning first="47" second="74" amount="1.625"/>
+<kerning first="47" second="79" amount="1.9375"/>
+<kerning first="47" second="81" amount="1.9375"/>
+<kerning first="47" second="83" amount="0.625"/>
+<kerning first="38" second="116" amount="0.625"/>
+<kerning first="38" second="118" amount="0.9375"/>
+<kerning first="38" second="119" amount="0.9375"/>
+<kerning first="38" second="121" amount="0.9375"/>
+<kerning first="38" second="74" amount="-0.9375"/>
+<kerning first="38" second="84" amount="2.875"/>
+<kerning first="38" second="86" amount="1.25"/>
+<kerning first="38" second="87" amount="1.25"/>
+<kerning first="38" second="89" amount="2.25"/>
+<kerning first="39" second="102" amount="-0.625"/>
+<kerning first="39" second="116" amount="-0.625"/>
+<kerning first="39" second="118" amount="-0.625"/>
+<kerning first="39" second="119" amount="-0.625"/>
+<kerning first="39" second="120" amount="-0.3125"/>
+<kerning first="39" second="121" amount="-0.625"/>
+<kerning first="39" second="65" amount="1.625"/>
+<kerning first="39" second="67" amount="0.625"/>
+<kerning first="39" second="71" amount="0.625"/>
+<kerning first="39" second="74" amount="1.9375"/>
+<kerning first="39" second="79" amount="0.625"/>
+<kerning first="39" second="81" amount="0.625"/>
+<kerning first="39" second="84" amount="-0.9375"/>
+<kerning first="39" second="86" amount="-0.625"/>
+<kerning first="39" second="87" amount="-0.625"/>
+<kerning first="39" second="89" amount="-0.625"/>
+<kerning first="39" second="39" amount="-0.9375"/>
+<kerning first="39" second="34" amount="-0.9375"/>
+<kerning first="39" second="8220" amount="-0.9375"/>
+<kerning first="39" second="8221" amount="-0.9375"/>
+<kerning first="34" second="102" amount="-0.625"/>
+<kerning first="34" second="116" amount="-0.625"/>
+<kerning first="34" second="118" amount="-0.625"/>
+<kerning first="34" second="119" amount="-0.625"/>
+<kerning first="34" second="120" amount="-0.3125"/>
+<kerning first="34" second="121" amount="-0.625"/>
+<kerning first="34" second="65" amount="1.625"/>
+<kerning first="34" second="67" amount="0.625"/>
+<kerning first="34" second="71" amount="0.625"/>
+<kerning first="34" second="74" amount="1.9375"/>
+<kerning first="34" second="79" amount="0.625"/>
+<kerning first="34" second="81" amount="0.625"/>
+<kerning first="34" second="84" amount="-0.9375"/>
+<kerning first="34" second="86" amount="-0.625"/>
+<kerning first="34" second="87" amount="-0.625"/>
+<kerning first="34" second="89" amount="-0.625"/>
+<kerning first="34" second="39" amount="-0.9375"/>
+<kerning first="34" second="34" amount="-0.9375"/>
+<kerning first="34" second="8220" amount="-0.9375"/>
+<kerning first="34" second="8221" amount="-0.9375"/>
+<kerning first="8211" second="97" amount="0.3125"/>
+<kerning first="8211" second="65" amount="0.625"/>
+<kerning first="8211" second="83" amount="0.625"/>
+<kerning first="8211" second="84" amount="1.625"/>
+<kerning first="8211" second="86" amount="0.625"/>
+<kerning first="8211" second="87" amount="0.625"/>
+<kerning first="8211" second="88" amount="1.625"/>
+<kerning first="8211" second="89" amount="0.9375"/>
+<kerning first="8211" second="90" amount="0.9375"/>
+<kerning first="8212" second="97" amount="0.3125"/>
+<kerning first="8212" second="65" amount="0.625"/>
+<kerning first="8212" second="83" amount="0.625"/>
+<kerning first="8212" second="84" amount="1.625"/>
+<kerning first="8212" second="86" amount="0.625"/>
+<kerning first="8212" second="87" amount="0.625"/>
+<kerning first="8212" second="88" amount="1.625"/>
+<kerning first="8212" second="89" amount="0.9375"/>
+<kerning first="8212" second="90" amount="0.9375"/>
+<kerning first="171" second="97" amount="0.3125"/>
+<kerning first="171" second="65" amount="0.625"/>
+<kerning first="171" second="83" amount="0.625"/>
+<kerning first="171" second="84" amount="1.625"/>
+<kerning first="171" second="86" amount="0.625"/>
+<kerning first="171" second="87" amount="0.625"/>
+<kerning first="171" second="88" amount="1.625"/>
+<kerning first="171" second="89" amount="0.9375"/>
+<kerning first="171" second="90" amount="0.9375"/>
+<kerning first="187" second="97" amount="0.3125"/>
+<kerning first="187" second="65" amount="0.625"/>
+<kerning first="187" second="83" amount="0.625"/>
+<kerning first="187" second="84" amount="1.625"/>
+<kerning first="187" second="86" amount="0.625"/>
+<kerning first="187" second="87" amount="0.625"/>
+<kerning first="187" second="88" amount="1.625"/>
+<kerning first="187" second="89" amount="0.9375"/>
+<kerning first="187" second="90" amount="0.9375"/>
+<kerning first="8220" second="102" amount="-0.625"/>
+<kerning first="8220" second="116" amount="-0.625"/>
+<kerning first="8220" second="118" amount="-0.625"/>
+<kerning first="8220" second="119" amount="-0.625"/>
+<kerning first="8220" second="120" amount="-0.3125"/>
+<kerning first="8220" second="121" amount="-0.625"/>
+<kerning first="8220" second="65" amount="1.625"/>
+<kerning first="8220" second="67" amount="0.625"/>
+<kerning first="8220" second="71" amount="0.625"/>
+<kerning first="8220" second="74" amount="1.9375"/>
+<kerning first="8220" second="79" amount="0.625"/>
+<kerning first="8220" second="81" amount="0.625"/>
+<kerning first="8220" second="84" amount="-0.9375"/>
+<kerning first="8220" second="86" amount="-0.625"/>
+<kerning first="8220" second="87" amount="-0.625"/>
+<kerning first="8220" second="89" amount="-0.625"/>
+<kerning first="8220" second="39" amount="-0.9375"/>
+<kerning first="8220" second="34" amount="-0.9375"/>
+<kerning first="8220" second="8220" amount="-0.9375"/>
+<kerning first="8220" second="8221" amount="-0.9375"/>
+<kerning first="8221" second="102" amount="-0.625"/>
+<kerning first="8221" second="116" amount="-0.625"/>
+<kerning first="8221" second="118" amount="-0.625"/>
+<kerning first="8221" second="119" amount="-0.625"/>
+<kerning first="8221" second="120" amount="-0.3125"/>
+<kerning first="8221" second="121" amount="-0.625"/>
+<kerning first="8221" second="65" amount="1.625"/>
+<kerning first="8221" second="67" amount="0.625"/>
+<kerning first="8221" second="71" amount="0.625"/>
+<kerning first="8221" second="74" amount="1.9375"/>
+<kerning first="8221" second="79" amount="0.625"/>
+<kerning first="8221" second="81" amount="0.625"/>
+<kerning first="8221" second="84" amount="-0.9375"/>
+<kerning first="8221" second="86" amount="-0.625"/>
+<kerning first="8221" second="87" amount="-0.625"/>
+<kerning first="8221" second="89" amount="-0.625"/>
+<kerning first="8221" second="39" amount="-0.9375"/>
+<kerning first="8221" second="34" amount="-0.9375"/>
+<kerning first="8221" second="8220" amount="-0.9375"/>
+<kerning first="8221" second="8221" amount="-0.9375"/>
+<kerning first="1072" second="46" amount="2.8125"/>
+<kerning first="1073" second="46" amount="2.8125"/>
+<kerning first="1074" second="46" amount="2.8125"/>
+<kerning first="1075" second="46" amount="2.8125"/>
+<kerning first="1076" second="46" amount="2.8125"/>
+<kerning first="1077" second="46" amount="2.8125"/>
+<kerning first="1105" second="46" amount="2.8125"/>
+<kerning first="1078" second="46" amount="2.8125"/>
+<kerning first="1079" second="46" amount="2.8125"/>
+<kerning first="1080" second="46" amount="2.8125"/>
+<kerning first="1081" second="46" amount="2.8125"/>
+<kerning first="1082" second="46" amount="2.8125"/>
+<kerning first="1083" second="46" amount="2.8125"/>
+<kerning first="1084" second="46" amount="2.8125"/>
+<kerning first="1085" second="46" amount="2.8125"/>
+<kerning first="1086" second="46" amount="2.8125"/>
+<kerning first="1087" second="46" amount="2.8125"/>
+<kerning first="1088" second="46" amount="2.8125"/>
+<kerning first="1089" second="46" amount="2.8125"/>
+<kerning first="1090" second="46" amount="2.8125"/>
+<kerning first="1091" second="46" amount="2.8125"/>
+<kerning first="1092" second="46" amount="2.8125"/>
+<kerning first="1093" second="46" amount="2.8125"/>
+<kerning first="1094" second="46" amount="2.8125"/>
+<kerning first="1095" second="46" amount="2.8125"/>
+<kerning first="1096" second="46" amount="2.8125"/>
+<kerning first="1097" second="46" amount="2.8125"/>
+<kerning first="1098" second="46" amount="2.8125"/>
+<kerning first="1099" second="46" amount="2.8125"/>
+<kerning first="1100" second="46" amount="2.8125"/>
+<kerning first="1101" second="46" amount="2.8125"/>
+<kerning first="1102" second="46" amount="2.8125"/>
+<kerning first="1103" second="46" amount="2.8125"/>
+<kerning first="1040" second="46" amount="2.8125"/>
+<kerning first="1041" second="46" amount="2.8125"/>
+<kerning first="1042" second="46" amount="2.8125"/>
+<kerning first="1043" second="46" amount="2.8125"/>
+<kerning first="1044" second="46" amount="2.8125"/>
+<kerning first="1045" second="46" amount="2.8125"/>
+<kerning first="1025" second="46" amount="2.8125"/>
+<kerning first="1046" second="46" amount="2.8125"/>
+<kerning first="1047" second="46" amount="2.8125"/>
+<kerning first="1048" second="46" amount="2.8125"/>
+<kerning first="1049" second="46" amount="2.8125"/>
+<kerning first="1050" second="46" amount="2.8125"/>
+<kerning first="1051" second="46" amount="2.8125"/>
+<kerning first="1052" second="46" amount="2.8125"/>
+<kerning first="1053" second="46" amount="2.8125"/>
+<kerning first="1054" second="46" amount="2.8125"/>
+<kerning first="1055" second="46" amount="2.8125"/>
+<kerning first="1056" second="46" amount="2.8125"/>
+<kerning first="1057" second="46" amount="2.8125"/>
+<kerning first="1058" second="46" amount="2.8125"/>
+<kerning first="1059" second="46" amount="2.8125"/>
+<kerning first="1060" second="46" amount="2.8125"/>
+<kerning first="1061" second="46" amount="2.8125"/>
+<kerning first="1063" second="46" amount="2.8125"/>
+<kerning first="1062" second="46" amount="2.8125"/>
+<kerning first="1064" second="46" amount="2.8125"/>
+<kerning first="1065" second="46" amount="2.8125"/>
+<kerning first="1066" second="46" amount="2.8125"/>
+<kerning first="1067" second="46" amount="2.8125"/>
+<kerning first="1068" second="46" amount="2.8125"/>
+<kerning first="1069" second="46" amount="2.8125"/>
+<kerning first="1070" second="46" amount="2.8125"/>
+<kerning first="1071" second="46" amount="2.8125"/>
+</kernings>
+</font>

+ 158 - 0
Bin/Data/LuaScripts/35_SignedDistanceFieldText.lua

@@ -0,0 +1,158 @@
+-- Signed distance field text example.
+-- This sample demonstrates:
+--     - Creating a 3D scene with static content
+--     - Creating a 3D text use SDF Font
+--     - Displaying the scene using the Renderer subsystem
+--     - Handling keyboard and mouse input to move a freelook camera
+
+require "LuaScripts/Utilities/Sample"
+
+function Start()
+    -- Execute the common startup for samples
+    SampleStart()
+
+    -- Create the scene content
+    CreateScene()
+
+    -- Create the UI content
+    CreateInstructions()
+
+    -- Setup the viewport for displaying the scene
+    SetupViewport()
+
+    -- Hook up to the frame update events
+    SubscribeToEvents()
+end
+
+function CreateScene()
+    scene_ = Scene()
+
+    -- Create the Octree component to the scene. This is required before adding any drawable components, or else nothing will
+    -- show up. The default octree volume will be from (-1000, -1000, -1000) to (1000, 1000, 1000) in world coordinates it
+    -- is also legal to place objects outside the volume but their visibility can then not be checked in a hierarchically
+    -- optimizing manner
+    scene_:CreateComponent("Octree")
+
+    -- Create a child scene node (at world origin) and a StaticModel component into it. Set the StaticModel to show a simple
+    -- plane mesh with a "stone" material. Note that naming the scene nodes is optional. Scale the scene node larger
+    -- (100 x 100 world units)
+    local planeNode = scene_:CreateChild("Plane")
+    planeNode.scale = Vector3(100.0, 1.0, 100.0)
+    local planeObject = planeNode:CreateComponent("StaticModel")
+    planeObject.model = cache:GetResource("Model", "Models/Plane.mdl")
+    planeObject.material = cache:GetResource("Material", "Materials/StoneTiled.xml")
+
+    -- Create a directional light to the world so that we can see something. The light scene node's orientation controls the
+    -- light direction we will use the SetDirection() function which calculates the orientation from a forward direction vector.
+    -- The light will use default settings (white light, no shadows)
+    local lightNode = scene_:CreateChild("DirectionalLight")
+    lightNode.direction = Vector3(0.6, -1.0, 0.8) -- The direction vector does not need to be normalized
+    local light = lightNode:CreateComponent("Light")
+    light.lightType = LIGHT_DIRECTIONAL
+
+    -- Create more StaticModel objects to the scene, randomly positioned, rotated and scaled. For rotation, we construct a
+    -- quaternion from Euler angles where the Y angle (rotation about the Y axis) is randomized. The mushroom model contains
+    -- LOD levels, so the StaticModel component will automatically select the LOD level according to the view distance (you'll
+    -- see the model get simpler as it moves further away). Finally, rendering a large number of the same object with the
+    -- same material allows instancing to be used, if the GPU supports it. This reduces the amount of CPU work in rendering the
+    -- scene.
+    local NUM_OBJECTS = 200
+    for i = 1, NUM_OBJECTS do
+        local mushroomNode = scene_:CreateChild("Mushroom")
+        mushroomNode.position = Vector3(Random(90.0) - 45.0, 0.0, Random(90.0) - 45.0)
+        mushroomNode:SetScale(0.5 + Random(2.0))
+        local mushroomObject = mushroomNode:CreateComponent("StaticModel")
+        mushroomObject.model = cache:GetResource("Model", "Models/Mushroom.mdl")
+        mushroomObject.material = cache:GetResource("Material", "Materials/Mushroom.xml")
+
+        local mushroomTitleNode = mushroomNode:CreateChild("MushroomTitle")
+        mushroomTitleNode.position = Vector3(0.0, 1.2, 0.0)
+        local mushroomTitleText = mushroomTitleNode:CreateComponent("Text3D")
+        mushroomTitleText.text = "Mushroom " .. i
+        if (i % 2) == 0 then
+            mushroomTitleText:SetFont(cache:GetResource("Font", "Fonts/BlueHighway.sdf"), 24)
+            mushroomTitleText.color = Color(0.0, 1.0, 0.0)
+        else
+            mushroomTitleText:SetFont(cache:GetResource("Font", "Fonts/Anonymous Pro.sdf"), 24)
+            mushroomTitleText.color = Color(1.0, 0.0, 0.0)
+        end
+        mushroomTitleText:SetAlignment(HA_CENTER, VA_CENTER)
+    end
+
+    -- Create a scene node for the camera, which we will move around
+    -- The camera will use default settings (1000 far clip distance, 45 degrees FOV, set aspect ratio automatically)
+    cameraNode = scene_:CreateChild("Camera")
+    cameraNode:CreateComponent("Camera")
+
+    -- Set an initial position for the camera scene node above the plane
+    cameraNode.position = Vector3(0.0, 5.0, 0.0)
+end
+
+function CreateInstructions()
+    -- Construct new Text object, set string to display and font to use
+    local instructionText = ui.root:CreateChild("Text")
+    instructionText:SetText("Use WASD keys and mouse to move")
+    instructionText:SetFont(cache:GetResource("Font", "Fonts/Anonymous Pro.ttf"), 15)
+
+    -- Position the text relative to the screen center
+    instructionText.horizontalAlignment = HA_CENTER
+    instructionText.verticalAlignment = VA_CENTER
+    instructionText:SetPosition(0, ui.root.height / 4)
+end
+
+function SetupViewport()
+    -- Set up a viewport to the Renderer subsystem so that the 3D scene can be seen. We need to define the scene and the camera
+    -- at minimum. Additionally we could configure the viewport screen size and the rendering path (eg. forward / deferred) to
+    -- use, but now we just use full screen and default render path configured in the engine command line options
+    local viewport = Viewport:new(scene_, cameraNode:GetComponent("Camera"))
+    renderer:SetViewport(0, viewport)
+end
+
+function MoveCamera(timeStep)
+    -- Do not move if the UI has a focused element (the console)
+    if ui.focusElement ~= nil then
+        return
+    end
+
+    -- Movement speed as world units per second
+    local MOVE_SPEED = 20.0
+    -- Mouse sensitivity as degrees per pixel
+    local MOUSE_SENSITIVITY = 0.1
+
+    -- Use this frame's mouse motion to adjust camera node yaw and pitch. Clamp the pitch between -90 and 90 degrees
+    local mouseMove = input.mouseMove
+    yaw = yaw +MOUSE_SENSITIVITY * mouseMove.x
+    pitch = pitch + MOUSE_SENSITIVITY * mouseMove.y
+    pitch = Clamp(pitch, -90.0, 90.0)
+
+    -- Construct new orientation for the camera scene node from yaw and pitch. Roll is fixed to zero
+    cameraNode.rotation = Quaternion(pitch, yaw, 0.0)
+
+    -- Read WASD keys and move the camera scene node to the corresponding direction if they are pressed
+    -- Use the Translate() function (default local space) to move relative to the node's orientation.
+    if input:GetKeyDown(KEY_W) then
+        cameraNode:Translate(Vector3(0.0, 0.0, 1.0) * MOVE_SPEED * timeStep)
+    end
+    if input:GetKeyDown(KEY_S) then
+        cameraNode:Translate(Vector3(0.0, 0.0, -1.0) * MOVE_SPEED * timeStep)
+    end
+    if input:GetKeyDown(KEY_A) then
+        cameraNode:Translate(Vector3(-1.0, 0.0, 0.0) * MOVE_SPEED * timeStep)
+    end
+    if input:GetKeyDown(KEY_D) then
+        cameraNode:Translate(Vector3(1.0, 0.0, 0.0) * MOVE_SPEED * timeStep)
+    end
+end
+
+function SubscribeToEvents()
+    -- Subscribe HandleUpdate() function for processing update events
+    SubscribeToEvent("Update", "HandleUpdate")
+end
+
+function HandleUpdate(eventType, eventData)
+    -- Take the frame time step, which is stored as a float
+    local timeStep = eventData:GetFloat("TimeStep")
+
+    -- Move the camera, scale movement with time step
+    MoveCamera(timeStep)
+end

+ 167 - 0
Bin/Data/Scripts/35_SignedDistanceFieldText.as

@@ -0,0 +1,167 @@
+// Signed distance field text example.
+// This sample demonstrates.
+//     - Creating a 3D scene with static content
+//     - Creating a 3D text use SDF Font
+//     - Displaying the scene using the Renderer subsystem
+//     - Handling keyboard and mouse input to move a freelook camera
+
+#include "Scripts/Utilities/Sample.as"
+
+void Start()
+{
+    // Execute the common startup for samples
+    SampleStart();
+
+    // Create the scene content
+    CreateScene();
+
+    // Create the UI content
+    CreateInstructions();
+
+    // Setup the viewport for displaying the scene
+    SetupViewport();
+
+    // Hook up to the frame update events
+    SubscribeToEvents();
+}
+
+void CreateScene()
+{
+    scene_ = Scene();
+
+    // Create the Octree component to the scene. This is required before adding any drawable components, or else nothing will
+    // show up. The default octree volume will be from (-1000, -1000, -1000) to (1000, 1000, 1000) in world coordinates; it
+    // is also legal to place objects outside the volume but their visibility can then not be checked in a hierarchically
+    // optimizing manner
+    scene_.CreateComponent("Octree");
+
+    // Create a child scene node (at world origin) and a StaticModel component into it. Set the StaticModel to show a simple
+    // plane mesh with a "stone" material. Note that naming the scene nodes is optional. Scale the scene node larger
+    // (100 x 100 world units)
+    Node@ planeNode = scene_.CreateChild("Plane");
+    planeNode.scale = Vector3(100.0f, 1.0f, 100.0f);
+    StaticModel@ planeObject = planeNode.CreateComponent("StaticModel");
+    planeObject.model = cache.GetResource("Model", "Models/Plane.mdl");
+    planeObject.material = cache.GetResource("Material", "Materials/StoneTiled.xml");
+
+    // Create a directional light to the world so that we can see something. The light scene node's orientation controls the
+    // light direction; we will use the SetDirection() function which calculates the orientation from a forward direction vector.
+    // The light will use default settings (white light, no shadows)
+    Node@ lightNode = scene_.CreateChild("DirectionalLight");
+    lightNode.direction = Vector3(0.6f, -1.0f, 0.8f); // The direction vector does not need to be normalized
+    Light@ light = lightNode.CreateComponent("Light");
+    light.lightType = LIGHT_DIRECTIONAL;
+
+    // Create more StaticModel objects to the scene, randomly positioned, rotated and scaled. For rotation, we construct a
+    // quaternion from Euler angles where the Y angle (rotation about the Y axis) is randomized. The mushroom model contains
+    // LOD levels, so the StaticModel component will automatically select the LOD level according to the view distance (you'll
+    // see the model get simpler as it moves further away). Finally, rendering a large number of the same object with the
+    // same material allows instancing to be used, if the GPU supports it. This reduces the amount of CPU work in rendering the
+    // scene.
+    const uint NUM_OBJECTS = 200;
+    for (uint i = 0; i < NUM_OBJECTS; ++i)
+    {
+        Node@ mushroomNode = scene_.CreateChild("Mushroom");
+        mushroomNode.position = Vector3(Random(90.0f) - 45.0f, 0.0f, Random(90.0f) - 45.0f);
+        mushroomNode.SetScale(0.5f + Random(2.0f));
+        StaticModel@ mushroomObject = mushroomNode.CreateComponent("StaticModel");
+        mushroomObject.model = cache.GetResource("Model", "Models/Mushroom.mdl");
+        mushroomObject.material = cache.GetResource("Material", "Materials/Mushroom.xml");
+
+        Node@ mushroomTitleNode = mushroomNode.CreateChild("MushroomTitle");
+        mushroomTitleNode.position = Vector3(0.0f, 1.2f, 0.0f);
+        Text3D@ mushroomTitleText = mushroomTitleNode.CreateComponent("Text3D");
+        mushroomTitleText.text = "Mushroom " + i;
+        if ((i % 2) == 0)
+        {
+            mushroomTitleText.SetFont(cache.GetResource("Font", "Fonts/BlueHighway.sdf"), 24);
+            mushroomTitleText.color = Color(0.0f, 1.0f, 0.0f);
+        }
+        else
+        {
+            mushroomTitleText.SetFont(cache.GetResource("Font", "Fonts/Anonymous Pro.sdf"), 24);
+            mushroomTitleText.color = Color(1.0f, 0.0f, 0.0f);
+        }
+        mushroomTitleText.SetAlignment(HA_CENTER, VA_CENTER);
+    }
+
+    // Create a scene node for the camera, which we will move around
+    // The camera will use default settings (1000 far clip distance, 45 degrees FOV, set aspect ratio automatically)
+    cameraNode = scene_.CreateChild("Camera");
+    cameraNode.CreateComponent("Camera");
+
+    // Set an initial position for the camera scene node above the plane
+    cameraNode.position = Vector3(0.0f, 5.0f, 0.0f);
+}
+
+void CreateInstructions()
+{
+    // Construct new Text object, set string to display and font to use
+    Text@ instructionText = ui.root.CreateChild("Text");
+    instructionText.text = "Use WASD keys and mouse to move";
+    instructionText.SetFont(cache.GetResource("Font", "Fonts/Anonymous Pro.ttf"), 15);
+
+    // Position the text relative to the screen center
+    instructionText.horizontalAlignment = HA_CENTER;
+    instructionText.verticalAlignment = VA_CENTER;
+    instructionText.SetPosition(0, ui.root.height / 4);
+}
+
+void SetupViewport()
+{
+    // Set up a viewport to the Renderer subsystem so that the 3D scene can be seen. We need to define the scene and the camera
+    // at minimum. Additionally we could configure the viewport screen size and the rendering path (eg. forward / deferred) to
+    // use, but now we just use full screen and default render path configured in the engine command line options
+    Viewport@ viewport = Viewport(scene_, cameraNode.GetComponent("Camera"));
+    renderer.viewports[0] = viewport;
+}
+
+void MoveCamera(float timeStep)
+{
+    // Do not move if the UI has a focused element (the console)
+    if (ui.focusElement !is null)
+        return;
+
+    // Movement speed as world units per second
+    const float MOVE_SPEED = 20.0f;
+    // Mouse sensitivity as degrees per pixel
+    const float MOUSE_SENSITIVITY = 0.1f;
+
+    // Use this frame's mouse motion to adjust camera node yaw and pitch. Clamp the pitch between -90 and 90 degrees
+    IntVector2 mouseMove = input.mouseMove;
+    yaw += MOUSE_SENSITIVITY * mouseMove.x;
+    pitch += MOUSE_SENSITIVITY * mouseMove.y;
+    pitch = Clamp(pitch, -90.0f, 90.0f);
+
+    // Construct new orientation for the camera scene node from yaw and pitch. Roll is fixed to zero
+    cameraNode.rotation = Quaternion(pitch, yaw, 0.0f);
+
+    // Read WASD keys and move the camera scene node to the corresponding direction if they are pressed
+    // Use the Translate() function (default local space) to move relative to the node's orientation.
+    if (input.keyDown['W'])
+        cameraNode.Translate(Vector3(0.0f, 0.0f, 1.0f) * MOVE_SPEED * timeStep);
+    if (input.keyDown['S'])
+        cameraNode.Translate(Vector3(0.0f, 0.0f, -1.0f) * MOVE_SPEED * timeStep);
+    if (input.keyDown['A'])
+        cameraNode.Translate(Vector3(-1.0f, 0.0f, 0.0f) * MOVE_SPEED * timeStep);
+    if (input.keyDown['D'])
+        cameraNode.Translate(Vector3(1.0f, 0.0f, 0.0f) * MOVE_SPEED * timeStep);
+}
+
+void SubscribeToEvents()
+{
+    // Subscribe HandleUpdate() function for processing update events
+    SubscribeToEvent("Update", "HandleUpdate");
+}
+
+void HandleUpdate(StringHash eventType, VariantMap& eventData)
+{
+    // Take the frame time step, which is stored as a float
+    float timeStep = eventData["TimeStep"].GetFloat();
+
+    // Move the camera, scale movement with time step
+    MoveCamera(timeStep);
+}
+
+// Create XML patch instructions for screen joystick layout specific to this sample app
+String patchInstructions = "";

+ 5 - 2
Source/Engine/UI/Font.cpp

@@ -41,7 +41,8 @@ static const int MAX_POINT_SIZE = 96;
 Font::Font(Context* context) :
     Resource(context),
     fontDataSize_(0),
-    fontType_(FONT_NONE)
+    fontType_(FONT_NONE),
+    sdfFont_(false)
 {
 }
 
@@ -83,9 +84,11 @@ bool Font::BeginLoad(Deserializer& source)
     String ext = GetExtension(GetName());
     if (ext == ".ttf" || ext == ".otf" || ext == ".woff")
         fontType_ = FONT_FREETYPE;
-    else if (ext == ".xml" || ext == ".fnt")
+    else if (ext == ".xml" || ext == ".fnt" || ext == ".sdf")
         fontType_ = FONT_BITMAP;
 
+    sdfFont_ = ext == ".sdf";
+
     SetMemoryUse(fontDataSize_);
     return true;
 }

+ 4 - 0
Source/Engine/UI/Font.h

@@ -61,6 +61,8 @@ public:
     bool SaveXML(Serializer& dest, int pointSize, bool usedGlyphs = false);
     /// Return font face. Pack and render to a texture if not rendered yet. Return null on error.
     FontFace* GetFace(int pointSize);
+    /// Is signed distance field font.
+    bool IsSDFFont() const { return sdfFont_; }
     
     /// Release font faces and recreate them next time when requested. Called when font textures lost or global font properties change.
     void ReleaseFaces();
@@ -79,6 +81,8 @@ private:
     unsigned fontDataSize_;
     /// Font type.
     FONT_TYPE fontType_;
+    /// Signed distance field font.
+    bool sdfFont_;
 };
 
 }

+ 6 - 0
Source/Engine/UI/Text.cpp

@@ -50,6 +50,7 @@ extern const char* UI_CATEGORY;
 
 Text::Text(Context* context) :
     UIElement(context),
+    usedInText3D_(false),
     fontSize_(DEFAULT_FONT_SIZE),
     textAlignment_(HA_LEFT),
     rowSpacing_(1.0f),
@@ -323,6 +324,11 @@ void Text::SetEffectColor(const Color& effectColor)
     effectColor_ = effectColor;
 }
 
+void Text::SetUsedInText3D(bool usedInText3D)
+{
+    usedInText3D_ = usedInText3D;
+}
+
 void Text::SetEffectDepthBias(float bias)
 {
     effectDepthBias_ = bias;

+ 6 - 2
Source/Engine/UI/Text.h

@@ -93,9 +93,9 @@ public:
     /// React to indent change.
     virtual void OnIndentSet();
 
-    /// Set font and font size.
+    /// Set font and font size and use signed distance field.
     bool SetFont(const String& fontName, int size = DEFAULT_FONT_SIZE);
-    /// Set font and font size.
+    /// Set font and font size and use signed distance field.
     bool SetFont(Font* font, int size = DEFAULT_FONT_SIZE);
     /// Set text. Text is assumed to be either ASCII or UTF8-encoded.
     void SetText(const String& text);
@@ -155,6 +155,8 @@ public:
     /// Return size of character by index.
     IntVector2 GetCharSize(unsigned index);
 
+    /// Set used in Text3D.
+    void SetUsedInText3D(bool usedInText3D);
     /// Set text effect Z bias. Zero by default, adjusted only in 3D mode.
     void SetEffectDepthBias(float bias);
     /// Return effect Z bias.
@@ -178,6 +180,8 @@ protected:
     /// Contruct batch.
     void ConstructBatch(UIBatch& pageBatch, const PODVector<GlyphLocation>& pageGlyphLocation, int dx = 0, int dy = 0, Color* color = 0, float depthBias = 0.0f);
 
+    /// Used in Text3D.
+    bool usedInText3D_;
     /// Font.
     SharedPtr<Font> font_;
     /// Current face.

+ 9 - 6
Source/Engine/UI/Text3D.cpp

@@ -55,6 +55,7 @@ Text3D::Text3D(Context* context) :
     textDirty_(true),
     geometryDirty_(true)
 {
+    text_.SetUsedInText3D(true);
     text_.SetEffectDepthBias(DEFAULT_EFFECT_DEPTH_BIAS);
 }
 
@@ -159,7 +160,7 @@ void Text3D::SetMaterial(Material* material)
 bool Text3D::SetFont(const String& fontName, int size)
 {
     bool success = text_.SetFont(fontName, size);
-    
+
     // Changing font requires materials to be re-evaluated. Material evaluation can not be done in worker threads,
     // so UI batches must be brought up-to-date immediately
     MarkTextDirty();
@@ -172,7 +173,7 @@ bool Text3D::SetFont(const String& fontName, int size)
 bool Text3D::SetFont(Font* font, int size)
 {
     bool success = text_.SetFont(font, size);
-    
+
     MarkTextDirty();
     UpdateTextBatches();
     UpdateTextMaterials();
@@ -521,10 +522,12 @@ void Text3D::UpdateTextMaterials(bool forceUpdate)
                 Material* material = new Material(context_);
                 Technique* tech = new Technique(context_);
                 Pass* pass = tech->CreatePass(PASS_ALPHA);
-                pass->SetVertexShader("Basic");
-                pass->SetVertexShaderDefines("DIFFMAP VERTEXCOLOR");
-                pass->SetPixelShader("Basic");
-                pass->SetPixelShaderDefines("ALPHAMAP VERTEXCOLOR");
+                pass->SetVertexShader("Text");
+                pass->SetPixelShader("Text");
+
+                if (GetFont()->IsSDFFont())
+                    pass->SetPixelShaderDefines("SIGNED_DISTANCE_FIELD");
+
                 pass->SetBlendMode(BLEND_ALPHA);
                 pass->SetDepthWrite(false);
                 material->SetTechnique(0, tech);

+ 2 - 2
Source/Engine/UI/Text3D.h

@@ -54,9 +54,9 @@ public:
     /// Return whether a geometry update is necessary, and if it can happen in a worker thread.
     virtual UpdateGeometryType GetUpdateGeometryType();
     
-    /// Set font and font size. Return true if successful.
+    /// Set font and font size and use signed distance field font. Return true if successful.
     bool SetFont(const String& fontName, int size = DEFAULT_FONT_SIZE);
-    /// Set font and font size. Return true if successful.
+    /// Set font and font size and use signed distance field font. Return true if successful.
     bool SetFont(Font* font, int size = DEFAULT_FONT_SIZE);
     /// Set material.
     void SetMaterial(Material* material);

+ 33 - 0
Source/Samples/35_SignedDistanceFieldText/CMakeLists.txt

@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2008-2014 the Urho3D project.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+
+# Define target name
+set (TARGET_NAME 35_SignedDistanceFieldText)
+
+# Define source files
+define_source_files (EXTRA_H_FILES ${COMMON_SAMPLE_H_FILES})
+
+# Setup target with resource copying
+setup_main_executable ()
+
+# Setup test cases
+add_test (NAME ${TARGET_NAME} COMMAND ${TARGET_NAME} -timeout ${URHO3D_TEST_TIME_OUT})

+ 216 - 0
Source/Samples/35_SignedDistanceFieldText/SignedDistanceFieldText.cpp

@@ -0,0 +1,216 @@
+//
+// Copyright (c) 2008-2014 the Urho3D project.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
+
+#include "Camera.h"
+#include "CoreEvents.h"
+#include "Engine.h"
+#include "Font.h"
+#include "Graphics.h"
+#include "Input.h"
+#include "Material.h"
+#include "Model.h"
+#include "Octree.h"
+#include "Renderer.h"
+#include "ResourceCache.h"
+#include "Scene.h"
+#include "StaticModel.h"
+#include "Text.h"
+#include "Text3D.h"
+#include "UI.h"
+
+#include "SignedDistanceFieldText.h"
+
+#include "DebugNew.h"
+
+DEFINE_APPLICATION_MAIN(SignedDistanceFieldText)
+
+SignedDistanceFieldText::SignedDistanceFieldText(Context* context) :
+    Sample(context)
+{
+}
+
+void SignedDistanceFieldText::Start()
+{
+    // Execute base class startup
+    Sample::Start();
+
+    // Create the scene content
+    CreateScene();
+
+    // Create the UI content
+    CreateInstructions();
+
+    // Setup the viewport for displaying the scene
+    SetupViewport();
+
+    // Hook up to the frame update events
+    SubscribeToEvents();
+}
+
+void SignedDistanceFieldText::CreateScene()
+{
+    ResourceCache* cache = GetSubsystem<ResourceCache>();
+
+    scene_ = new Scene(context_);
+
+    // Create the Octree component to the scene. This is required before adding any drawable components, or else nothing will
+    // show up. The default octree volume will be from (-1000, -1000, -1000) to (1000, 1000, 1000) in world coordinates; it
+    // is also legal to place objects outside the volume but their visibility can then not be checked in a hierarchically
+    // optimizing manner
+    scene_->CreateComponent<Octree>();
+
+    // Create a child scene node (at world origin) and a StaticModel component into it. Set the StaticModel to show a simple
+    // plane mesh with a "stone" material. Note that naming the scene nodes is optional. Scale the scene node larger
+    // (100 x 100 world units)
+    Node* planeNode = scene_->CreateChild("Plane");
+    planeNode->SetScale(Vector3(100.0f, 1.0f, 100.0f));
+    StaticModel* planeObject = planeNode->CreateComponent<StaticModel>();
+    planeObject->SetModel(cache->GetResource<Model>("Models/Plane.mdl"));
+    planeObject->SetMaterial(cache->GetResource<Material>("Materials/StoneTiled.xml"));
+
+    // Create a directional light to the world so that we can see something. The light scene node's orientation controls the
+    // light direction; we will use the SetDirection() function which calculates the orientation from a forward direction vector.
+    // The light will use default settings (white light, no shadows)
+    Node* lightNode = scene_->CreateChild("DirectionalLight");
+    lightNode->SetDirection(Vector3(0.6f, -1.0f, 0.8f)); // The direction vector does not need to be normalized
+    Light* light = lightNode->CreateComponent<Light>();
+    light->SetLightType(LIGHT_DIRECTIONAL);
+
+    // Create more StaticModel objects to the scene, randomly positioned, rotated and scaled. For rotation, we construct a
+    // quaternion from Euler angles where the Y angle (rotation about the Y axis) is randomized. The mushroom model contains
+    // LOD levels, so the StaticModel component will automatically select the LOD level according to the view distance (you'll
+    // see the model get simpler as it moves further away). Finally, rendering a large number of the same object with the
+    // same material allows instancing to be used, if the GPU supports it. This reduces the amount of CPU work in rendering the
+    // scene.
+    const unsigned NUM_OBJECTS = 200;
+    for (unsigned i = 0; i < NUM_OBJECTS; ++i)
+    {
+        Node* mushroomNode = scene_->CreateChild("Mushroom");
+        mushroomNode->SetPosition(Vector3(Random(90.0f) - 45.0f, 0.0f, Random(90.0f) - 45.0f));
+        mushroomNode->SetScale(0.5f + Random(2.0f));
+        StaticModel* mushroomObject = mushroomNode->CreateComponent<StaticModel>();
+        mushroomObject->SetModel(cache->GetResource<Model>("Models/Mushroom.mdl"));
+        mushroomObject->SetMaterial(cache->GetResource<Material>("Materials/Mushroom.xml"));
+
+        Node* mushroomTitleNode = mushroomNode->CreateChild("MushroomTitle");
+        mushroomTitleNode->SetPosition(Vector3(0.0f, 1.2f, 0.0f));
+        Text3D* mushroomTitleText = mushroomTitleNode->CreateComponent<Text3D>();
+        mushroomTitleText->SetText("Mushroom " + String(i));
+        if ((i % 2) == 0)
+        {
+            mushroomTitleText->SetFont(cache->GetResource<Font>("Fonts/BlueHighway.sdf"), 24);
+            mushroomTitleText->SetColor(Color::GREEN);
+        }
+        else
+        {
+            mushroomTitleText->SetFont(cache->GetResource<Font>("Fonts/Anonymous Pro.sdf"), 24);
+            mushroomTitleText->SetColor(Color::RED);
+        }
+        mushroomTitleText->SetAlignment(HA_CENTER, VA_CENTER);
+    }
+
+    // Create a scene node for the camera, which we will move around
+    // The camera will use default settings (1000 far clip distance, 45 degrees FOV, set aspect ratio automatically)
+    cameraNode_ = scene_->CreateChild("Camera");
+    cameraNode_->CreateComponent<Camera>();
+
+    // Set an initial position for the camera scene node above the plane
+    cameraNode_->SetPosition(Vector3(0.0f, 5.0f, 0.0f));
+}
+
+void SignedDistanceFieldText::CreateInstructions()
+{
+    ResourceCache* cache = GetSubsystem<ResourceCache>();
+    UI* ui = GetSubsystem<UI>();
+
+    // Construct new Text object, set string to display and font to use
+    Text* instructionText = ui->GetRoot()->CreateChild<Text>();
+    instructionText->SetText("Use WASD keys and mouse/touch to move");
+    instructionText->SetFont(cache->GetResource<Font>("Fonts/Anonymous Pro.ttf"), 15);
+
+    // Position the text relative to the screen center
+    instructionText->SetHorizontalAlignment(HA_CENTER);
+    instructionText->SetVerticalAlignment(VA_CENTER);
+    instructionText->SetPosition(0, ui->GetRoot()->GetHeight() / 4);
+}
+
+void SignedDistanceFieldText::SetupViewport()
+{
+    Renderer* renderer = GetSubsystem<Renderer>();
+
+    // Set up a viewport to the Renderer subsystem so that the 3D scene can be seen. We need to define the scene and the camera
+    // at minimum. Additionally we could configure the viewport screen size and the rendering path (eg. forward / deferred) to
+    // use, but now we just use full screen and default render path configured in the engine command line options
+    SharedPtr<Viewport> viewport(new Viewport(context_, scene_, cameraNode_->GetComponent<Camera>()));
+    renderer->SetViewport(0, viewport);
+}
+
+void SignedDistanceFieldText::MoveCamera(float timeStep)
+{
+    // Do not move if the UI has a focused element (the console)
+    if (GetSubsystem<UI>()->GetFocusElement())
+        return;
+
+    Input* input = GetSubsystem<Input>();
+
+    // Movement speed as world units per second
+    const float MOVE_SPEED = 20.0f;
+    // Mouse sensitivity as degrees per pixel
+    const float MOUSE_SENSITIVITY = 0.1f;
+
+    // Use this frame's mouse motion to adjust camera node yaw and pitch. Clamp the pitch between -90 and 90 degrees
+    IntVector2 mouseMove = input->GetMouseMove();
+    yaw_ += MOUSE_SENSITIVITY * mouseMove.x_;
+    pitch_ += MOUSE_SENSITIVITY * mouseMove.y_;
+    pitch_ = Clamp(pitch_, -90.0f, 90.0f);
+
+    // Construct new orientation for the camera scene node from yaw and pitch. Roll is fixed to zero
+    cameraNode_->SetRotation(Quaternion(pitch_, yaw_, 0.0f));
+
+    // Read WASD keys and move the camera scene node to the corresponding direction if they are pressed
+    // Use the Translate() function (default local space) to move relative to the node's orientation.
+    if (input->GetKeyDown('W'))
+        cameraNode_->Translate(Vector3::FORWARD * MOVE_SPEED * timeStep);
+    if (input->GetKeyDown('S'))
+        cameraNode_->Translate(Vector3::BACK * MOVE_SPEED * timeStep);
+    if (input->GetKeyDown('A'))
+        cameraNode_->Translate(Vector3::LEFT * MOVE_SPEED * timeStep);
+    if (input->GetKeyDown('D'))
+        cameraNode_->Translate(Vector3::RIGHT * MOVE_SPEED * timeStep);
+}
+
+void SignedDistanceFieldText::SubscribeToEvents()
+{
+    // Subscribe HandleUpdate() function for processing update events
+    SubscribeToEvent(E_UPDATE, HANDLER(SignedDistanceFieldText, HandleUpdate));
+}
+
+void SignedDistanceFieldText::HandleUpdate(StringHash eventType, VariantMap& eventData)
+{
+    using namespace Update;
+
+    // Take the frame time step, which is stored as a float
+    float timeStep = eventData[P_TIMESTEP].GetFloat();
+
+    // Move the camera, scale movement with time step
+    MoveCamera(timeStep);
+}

+ 65 - 0
Source/Samples/35_SignedDistanceFieldText/SignedDistanceFieldText.h

@@ -0,0 +1,65 @@
+//
+// Copyright (c) 2008-2014 the Urho3D project.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
+
+#pragma once
+
+#include "Sample.h"
+
+namespace Urho3D
+{
+
+class Node;
+class Scene;
+
+}
+
+/// Signed distance field text example.
+/// This sample demonstrates:
+///     - Creating a 3D scene with static content
+///     - Creating a 3D text use SDF Font
+///     - Displaying the scene using the Renderer subsystem
+///     - Handling keyboard and mouse input to move a freelook camera
+class SignedDistanceFieldText : public Sample
+{
+    OBJECT(SignedDistanceFieldText);
+
+public:
+    /// Construct.
+    SignedDistanceFieldText(Context* context);
+
+    /// Setup after engine initialization and before running the main loop.
+    virtual void Start();
+
+private:
+    /// Construct the scene content.
+    void CreateScene();
+    /// Construct an instruction text to the UI.
+    void CreateInstructions();
+    /// Set up a viewport for displaying the scene.
+    void SetupViewport();
+    /// Read input and moves the camera.
+    void MoveCamera(float timeStep);
+    /// Subscribe to application-wide logic update events.
+    void SubscribeToEvents();
+    /// Handle the logic update event.
+    void HandleUpdate(StringHash eventType, VariantMap& eventData);
+};

+ 1 - 0
Source/Samples/CMakeLists.txt

@@ -72,3 +72,4 @@ add_subdirectory (31_MaterialAnimation)
 add_subdirectory (32_Urho2DConstraints)
 add_subdirectory (33_Urho2DSpriterAnimation)
 add_subdirectory (34_DynamicGeometry)
+add_subdirectory (35_SignedDistanceFieldText)