#ifndef MBGL_GEOMETRY_GLYPH_ATLAS #define MBGL_GEOMETRY_GLYPH_ATLAS #include #include #include #include #include #include #include #include namespace mbgl { class GlyphAtlas : public util::noncopyable { public: private: struct GlyphValue { GlyphValue(const Rect& rect_, uint64_t id) : rect(rect_), ids({ id }) {} Rect rect; std::set ids; }; Rect addGlyph_impl(uint64_t tile_id, const std::string& face_name, const SDFGlyph& glyph); public: GlyphAtlas(uint16_t width, uint16_t height); Rect addGlyph(uint64_t tile_id, const std::string& face_name, const SDFGlyph& glyph); void addGlyphs(uint64_t tileid, std::u32string const& text, std::string const& stackname, FontStack const& fontStack, GlyphPositions & face); void removeGlyphs(uint64_t tile_id); void bind(); public: const uint16_t width = 0; const uint16_t height = 0; private: std::mutex mtx; BinPack bin; std::map> index; std::unique_ptr data; std::atomic dirty; uint32_t texture = 0; }; }; #endif