Changed how the bitmap font prepares characters.
Playground was updated to reflect this.
This commit is contained in:
parent
0e3f1dfef3
commit
75ef59293f
@ -67,9 +67,33 @@ namespace SlatedGameToolkit.Framework.Graphics.Text
|
|||||||
return textures[index];
|
return textures[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
public unsafe void Draw(MeshBatch batch, float x, float baseLine, string text, Color color) {
|
/// <summary>
|
||||||
|
/// Prepares the characters for rendering. All characters to be rendered in one frame should be loaded using this method.
|
||||||
|
/// This will also ensure that the bitmap font is big enough.
|
||||||
|
/// Calling this multiple times per frame is not good for performance as multiple texture uploads are occurring.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="characters">An array of characters to load. Won't load if already loaded.</param>
|
||||||
|
public void PrepareCharacterGroup(params char[] characters) {
|
||||||
int textureChanges = 0;
|
int textureChanges = 0;
|
||||||
|
foreach (char c in characters)
|
||||||
|
{
|
||||||
|
if (!glyphTexLocations.ContainsKey((c, scale)) || !textures[glyphTexLocations[(c, scale)]].ContainsChar(c, scale)) {
|
||||||
|
glyphTexLocations.Remove((c, scale));
|
||||||
|
if (!textures[drawingTo].Upload(scale, c)) {
|
||||||
|
drawingTo++;
|
||||||
|
if (drawingTo >= textures.Length) drawingTo = 0;
|
||||||
|
FontTexture fontTexture = textures[drawingTo];
|
||||||
|
fontTexture.Clear();
|
||||||
|
fontTexture.Upload(scale, c);
|
||||||
|
textureChanges++;
|
||||||
|
if (textureChanges > textures.Length) throw new FrameworkUsageException(string.Format("Character group \"{0}\" takes up too much texture space! Consider increasing decreasing font size, or increasing texture lengths, or number of backing textures.", new string(characters)));
|
||||||
|
}
|
||||||
|
glyphTexLocations.Add((c, scale), drawingTo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public unsafe void Draw(MeshBatch batch, float x, float baseLine, string text, Color color) {
|
||||||
float currentPoint = x;
|
float currentPoint = x;
|
||||||
char[] chars = text.ToCharArray();
|
char[] chars = text.ToCharArray();
|
||||||
for (int i = 0; i < chars.Length; i++) {
|
for (int i = 0; i < chars.Length; i++) {
|
||||||
@ -80,19 +104,9 @@ namespace SlatedGameToolkit.Framework.Graphics.Text
|
|||||||
context.GetViewport(out vX, out vY, out viewWidth, out viewHeight);
|
context.GetViewport(out vX, out vY, out viewWidth, out viewHeight);
|
||||||
|
|
||||||
if (c != ' ') {
|
if (c != ' ') {
|
||||||
//Check if glyph is loaded, if not, load it.
|
//Check if glyph is loaded, if not, throw exception.
|
||||||
if (!glyphTexLocations.ContainsKey((c, scale)) || !textures[glyphTexLocations[(c, scale)]].ContainsChar(c, scale)) {
|
if (!glyphTexLocations.ContainsKey((c, scale)) || !textures[glyphTexLocations[(c, scale)]].ContainsChar(c, scale)) {
|
||||||
glyphTexLocations.Remove((c, scale));
|
throw new FrameworkUsageException(string.Format("Character \'{0}\' was not prepared and is missing!", c));
|
||||||
if (!textures[drawingTo].Upload(scale, c)) {
|
|
||||||
drawingTo++;
|
|
||||||
if (drawingTo >= textures.Length) drawingTo = 0;
|
|
||||||
FontTexture fontTexture = textures[drawingTo];
|
|
||||||
fontTexture.Clear();
|
|
||||||
fontTexture.Upload(scale, c);
|
|
||||||
textureChanges++;
|
|
||||||
if (textureChanges > textures.Length) throw new FrameworkUsageException(string.Format("String \"{0}\" takes up too much texture space! Consider increasing decreasing font size, or increasing texture lengths, or number of backing textures. Attempted to swap {1} times within draw call.", text, textureChanges));
|
|
||||||
}
|
|
||||||
glyphTexLocations.Add((c, scale), drawingTo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FontTexture texture = textures[glyphTexLocations[(c, scale)]];
|
FontTexture texture = textures[glyphTexLocations[(c, scale)]];
|
||||||
|
@ -80,6 +80,7 @@ namespace SlatedGameToolkit.Tools.Utilities.Playground
|
|||||||
|
|
||||||
font = new BitmapFont("Resources/Playground/earwig_factory_rg.ttf");
|
font = new BitmapFont("Resources/Playground/earwig_factory_rg.ttf");
|
||||||
font.PixelHeight = 128;
|
font.PixelHeight = 128;
|
||||||
|
font.PrepareCharacterGroup("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".ToCharArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Render(double delta)
|
public void Render(double delta)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user