diff options
Diffstat (limited to 'include/mbgl/geometry/glyph_atlas.hpp')
-rw-r--r-- | include/mbgl/geometry/glyph_atlas.hpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/include/mbgl/geometry/glyph_atlas.hpp b/include/mbgl/geometry/glyph_atlas.hpp new file mode 100644 index 0000000000..e05cbe3b90 --- /dev/null +++ b/include/mbgl/geometry/glyph_atlas.hpp @@ -0,0 +1,51 @@ +#ifndef MBGL_GEOMETRY_GLYPH_ATLAS +#define MBGL_GEOMETRY_GLYPH_ATLAS + +#include <mbgl/geometry/binpack.hpp> +#include <mbgl/text/glyph_store.hpp> + +#include <string> +#include <set> +#include <map> +#include <mutex> +#include <atomic> + +namespace mbgl { + +class GlyphAtlas { +public: + +private: + struct GlyphValue { + GlyphValue(const Rect<uint16_t>& rect, uint64_t id) + : rect(rect), ids({ id }) {} + Rect<uint16_t> rect; + std::set<uint64_t> ids; + }; + +public: + GlyphAtlas(uint16_t width, uint16_t height); + ~GlyphAtlas(); + + + Rect<uint16_t> addGlyph(uint64_t tile_id, const std::string& face_name, + const SDFGlyph& glyph); + void removeGlyphs(uint64_t tile_id); + void bind(); + +public: + const uint16_t width = 0; + const uint16_t height = 0; + +private: + std::mutex mtx; + BinPack<uint16_t> bin; + std::map<std::string, std::map<uint32_t, GlyphValue>> index; + char *const data = nullptr; + std::atomic<bool> dirty; + uint32_t texture = 0; +}; + +}; + +#endif |