void TileParser::addGlyph(uint64_t tileid, const std::string stackname, const std::u32string &string, const FontStack &fontStack, GlyphAtlas &glyphAtlas, GlyphPositions &face) { const std::map<uint32_t, SDFGlyph> &sdfs = fontStack.getSDFs(); // Loop through all characters and add glyph to atlas, positions. for (uint32_t chr : string) { auto sdf_it = sdfs.find(chr); if (sdf_it != sdfs.end()) { const SDFGlyph& sdf = sdf_it->second; const Rect<uint16_t> rect = glyphAtlas.addGlyph(tileid, stackname, sdf); face.emplace(chr, Glyph{rect, sdf.metrics}); } } }
void GlyphAtlas::addGlyphs(uint64_t tileid, std::u32string const& text, std::string const& stackname, FontStack const& fontStack, GlyphPositions & face) { std::lock_guard<std::mutex> lock(mtx); std::map<uint32_t, SDFGlyph> const& sdfs = fontStack.getSDFs(); for (uint32_t chr : text) { auto sdf_it = sdfs.find(chr); if (sdf_it != sdfs.end()) { SDFGlyph const& sdf = sdf_it->second; Rect<uint16_t> rect = addGlyph_impl(tileid, stackname, sdf); face.emplace(chr, Glyph{rect, sdf.metrics}); } } }
void GlyphAtlas::addGlyphs(uintptr_t tileUID, const std::u32string& text, const std::string& stackName, const FontStack& fontStack, GlyphPositions& face) { std::lock_guard<std::mutex> lock(mtx); const std::map<uint32_t, SDFGlyph>& sdfs = fontStack.getSDFs(); for (uint32_t chr : text) { auto sdf_it = sdfs.find(chr); if (sdf_it == sdfs.end()) { continue; } const SDFGlyph& sdf = sdf_it->second; Rect<uint16_t> rect = addGlyph(tileUID, stackName, sdf); face.emplace(chr, Glyph{rect, sdf.metrics}); } }