diff --git a/src/kekengine/cpp/render/fonts.cpp b/src/kekengine/cpp/render/fonts.cpp index 2e8cd5c..6e9d847 100644 --- a/src/kekengine/cpp/render/fonts.cpp +++ b/src/kekengine/cpp/render/fonts.cpp @@ -248,11 +248,13 @@ CharacterBlock Font::generateCharacterBlock(unsigned int block) { int col = c % KEK_FONT_BITMAP_WIDTH_BLOCKS; int row = c / KEK_FONT_BITMAP_WIDTH_BLOCKS; - for(unsigned int r = 0; r < face->glyph->bitmap.rows; r++) { - memcpy( - textureBytes + row * KEK_FONT_RESOLUTION * KEK_FONT_BITMAP_WIDTH + col * KEK_FONT_RESOLUTION + r * KEK_FONT_BITMAP_WIDTH, + // TODO: handle wide characters more gracefully + for(unsigned int r = 0; r < std::min(64u, face->glyph->bitmap.rows); r++) { + size_t offset = row * KEK_FONT_RESOLUTION * KEK_FONT_BITMAP_WIDTH + col * KEK_FONT_RESOLUTION + r * KEK_FONT_BITMAP_WIDTH; + size_t len = face->glyph->bitmap.width; + memcpy(textureBytes + offset, face->glyph->bitmap.buffer + r * face->glyph->bitmap.width, - face->glyph->bitmap.width); + len); } Character ch;