public static void BuildFontAtlas(AtlasProject atlasProj) { foreach (AtlasItemSourceFile atlasSourceFile in atlasProj.Items) { if (atlasSourceFile.Kind == AtlasItemSourceKind.FontAtlasConfig && atlasSourceFile.FontBuilderConfig != null) { FontBuilderConfig config = atlasSourceFile.FontBuilderConfig; foreach (FontBuilderTask builderTask in config.BuilderTasks) { //1. create glyph-texture-bitmap generator var glyphTextureGen = new GlyphTextureBitmapGenerator(); glyphTextureGen.SetSvgBmpBuilderFunc(SvgBuilderHelper.ParseAndRenderSvg); //2. generate the glyphs if (builderTask.TextureKind == TextureKind.Msdf) { glyphTextureGen.MsdfGenVersion = 3; } Typography.OpenFont.Typeface typeface = atlasProj.GetTypeface(config.FontFilename); //TODO: add other font styles RequestFont reqFont = new RequestFont(typeface.Name, builderTask.Size, FontStyle.Regular); string textureName = typeface.Name.ToLower() + "_" + reqFont.FontKey; string outputDir = Path.GetDirectoryName(atlasProj.OutputFilename); FontAtlasBuilderHelper builderHelper = new FontAtlasBuilderHelper(); builderHelper.TextureInfoFilename = outputDir + Path.DirectorySeparatorChar + textureName; builderHelper.OutputImgFilename = outputDir + Path.DirectorySeparatorChar + textureName + ".png"; builderHelper.Build(glyphTextureGen, typeface, builderTask.Size, builderTask.TextureKind, builderTask.TextureBuildDetails.ToArray(), reqFont.FontKey ); } } } }
static void ReadFontBuilderConfig(AtlasItemSourceFile atlasSrcItem, XmlElement docElem) { FontBuilderConfig fontBuilderConfig = new FontBuilderConfig(); //cut 1 extension //if font filename=aaa.ttf //configure must be aaa.ttf.xml fontBuilderConfig.FontFilename = Path.GetFileNameWithoutExtension(atlasSrcItem.AbsoluteFilename); atlasSrcItem.FontBuilderConfig = fontBuilderConfig; foreach (XmlElement setElem in docElem.SelectNodes("set")) { //defail fontBuilderConfig.SetTextureKind(setElem.GetAttribute("texture_kind")); foreach (XmlNode cc in setElem.ChildNodes) { if (cc is XmlElement childElem) { switch (childElem.Name) { case "script_lang": fontBuilderConfig.AddScriptLangAndHint( childElem.GetAttribute("lang"), childElem.GetAttribute("hint")); break; case "size": fontBuilderConfig.SetSizeList(childElem.InnerText); break; } } } } fontBuilderConfig.BuildConfigDetail(); }