在FontAtlasCache类里面加了方法,直接上代码:
bool FontAtlasCache::hasInvalidChar(const std::string& fontFile, const std::string& text)
{TTFConfig ttfConfig(fontFile.c_str(), 20, GlyphCollection::DYNAMIC);
FontAtlas * font = getFontAtlasTTF(ttfConfig);
if(font == nullptr)
{
return true;
}
Font* _font = const_cast<Font*>(font->getFont());
FontFreeType* fontTTf = dynamic_cast<FontFreeType*>(_font);
if(fontTTf ==nullptr)
{
font->release();
return true;
}
std::u16string utf16String;
long bitmapWidth;
long bitmapHeight;
Rect tempRect;
int xAdvance = 0;
bool invalid = false;
if (StringUtils::UTF8ToUTF16(text, utf16String))
{
size_t length = utf16String.length();
for (size_t i = 0; i < length; ++i)
{
auto bitmap = fontTTf->getGlyphBitmap(utf16String[i], bitmapWidth, bitmapHeight, tempRect, xAdvance);
if(bitmap == nullptr && xAdvance == 0)
{
invalid = true;
break;
}
else
{
xAdvance = 0;
}
}
}
font->release();
return invalid;
}