diff --git a/src/rtext.c b/src/rtext.c index f531361a5..da93af7e3 100644 --- a/src/rtext.c +++ b/src/rtext.c @@ -695,16 +695,18 @@ Image GenImageFontAtlas(const GlyphInfo *chars, Rectangle **charRecs, int glyphC Rectangle *recs = (Rectangle *)RL_MALLOC(glyphCount*sizeof(Rectangle)); // Calculate image size based on total glyph width and glyph row count - int totalWidth = 0; - for (int i = 0; i < glyphCount; i++) totalWidth += chars[i].image.width + 2*padding; - int imageSize = 64; // A minimum starting value to avoid unnecessary calculation steps for very small images - int rowCount = 0; - do + int totalWidth = 0, maxGlyphWidth = 0; + for (int i = 0; i < glyphCount; i++) { - imageSize *= 2; // Double the size of image (to keep POT) - rowCount = imageSize/(fontSize + 2*padding); // Calculate new row count for the new image size + if (chars[i].image.width > maxGlyphWidth) maxGlyphWidth = chars[i].image.width; + totalWidth += chars[i].image.width + 2*padding; + } + int rowCount = 0, imageSize = 64; // A minimum starting value to avoid unnecessary calculation steps for very small images + while (totalWidth > (imageSize - maxGlyphWidth)*rowCount) // maxGlyphWidth is maximum possible space left at the end of row + { + imageSize *= 2; // Double the size of image (to keep POT) + rowCount = imageSize/(fontSize + 2*padding); // Calculate new row count for the new image size } - while (totalWidth > imageSize*rowCount); atlas.width = imageSize; // Atlas bitmap width atlas.height = imageSize; // Atlas bitmap height