Fix a bug in the font system.

When the finding a rectangle for a glyph at a particular character size,
if the glyph happens to be wider than the current texture size, but less
high than the unused height in the texture, the texture will not be
correctly doubled in size (since only the height is checked).

In practice, this only occurs when finding the rectangle for the *very
first* glyph (so the texture is at its default 128x128 size): otherwise,
the glyph would need to be unusually wide compared to its height to
trigger the bug.

This will trigger a debug assertion in Texture::update(). With assertions
disabled, there are knock-on effects and most text at that character size
will fail to render.
This commit is contained in:
STU 2014-07-20 14:37:15 +01:00 committed by Lukas Dürrenberger
parent 7ace90986b
commit 6ad7b21203

View File

@ -624,7 +624,7 @@ IntRect Font::findGlyphRect(Page& page, unsigned int width, unsigned int height)
if (!row) if (!row)
{ {
int rowHeight = height + height / 10; int rowHeight = height + height / 10;
while (page.nextRow + rowHeight >= page.texture.getSize().y) while ((page.nextRow + rowHeight >= page.texture.getSize().y) || (width >= page.texture.getSize().x))
{ {
// Not enough space: resize the texture if possible // Not enough space: resize the texture if possible
unsigned int textureWidth = page.texture.getSize().x; unsigned int textureWidth = page.texture.getSize().x;