Font building is taking forever after changing the character region end to a bigger number

I had my spritefont with the character region from 23 to 1023 and it built just fine however now that I changed the end to 8364(the unicode number of the euro sign), whenever I try to run the game, building is stuck at 1> Building Font C:\Windows\Fonts\comic.ttf.
my spritefont file in case it matters:

<?xml version="1.0" encoding="utf-8"?>
<!--
This file contains an xml description of a font, and will be read by the XNA
Framework Content Pipeline. Follow the comments to customize the appearance
of the font in your game, and to change the characters which are available to draw
with.
-->
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
	<Asset Type="Graphics:FontDescription">

		<!--
    Modify this string to change the font that will be imported.
    -->
		<FontName>Comic Sans MS</FontName>

		<!--
    Size is a float value, measured in points. Modify this value to change
    the size of the font.
    -->
		<Size>72</Size>

		<!--
    Spacing is a float value, measured in pixels. Modify this value to change
    the amount of spacing in between characters.
    -->
		<Spacing>0</Spacing>

		<!--
    UseKerning controls the layout of the font. If this value is true, kerning information
    will be used when placing characters.
    -->
		<UseKerning>true</UseKerning>

		<!--
    Style controls the style of the font. Valid entries are "Regular", "Bold", "Italic",
    and "Bold, Italic", and are case sensitive.
    -->
		<Style>Regular</Style>

		<!--
    If you uncomment this line, the default character will be substituted if you draw
    or measure text that contains characters which were not included in the font.
    -->
		<DefaultCharacter>A</DefaultCharacter>

		<!--
    CharacterRegions control what letters are available in the font. Every
    character from Start to End will be built and made available for drawing. The
    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin
    character set. The characters are ordered according to the Unicode standard.
    See the documentation for more information.
    -->
		<CharacterRegions>
			<CharacterRegion>
				<Start>&#32;</Start>
				<End>&#8364;</End>
			</CharacterRegion>
		</CharacterRegions>
	</Asset>
</XnaContent>

Itā€™s a fixed issue in the development branch, but the problem is still present in the current release. You can either wait for 3.8.1 to release or use the development branch.

1 Like

oh so itā€™s a monogame bug, thanks

1 Like

So this is a MonoGame bug?
Iā€™m using MonoGame 3.8.0. Has this bug been resolved for this version, or should I use the development branch? What exactly was the issue?

To answer your question, it 's been fixed in 3.8.1.

Nowā€¦ you can have multiple character regions. If for example you need the euro sign, you include a region from 8364 to 8364 along with the region 32-126.

You shouldnā€™t include all the 8000 characters in between. That will create a huge texture, and possibly an error if you pass the cpu texture limit.

1 Like

Sorry, Sore point, brought up in an issue last year.

The texture size limit is not CPU or GPU bound, it is MonoGame arbitrary boundary. 16k x 16k is the normal max size and has been for a while on most GPUs, 8k x 8k on othersā€¦; The bound is in the implementation see:

Compressed formats that can be passed directly to the GPU work fine(DXT at 1/4 the size), any conversions to other formats fail. Array indexes are only 2^16 - overhead. The marshaling methods used only accept 32 bit addresses and sizes.

I wrote my own Alpha8 implementation that allows huge fonts to use a format at 1/4 of the size of the color conversion for cross platform OpenGL implementation.

The Alpha8 implementation is broken between Windows and GL. I would have preferred a Red8 struct, alas XNA did not provide.