diff options
author | Chris Loer <chris.loer@gmail.com> | 2017-03-31 14:53:18 -0700 |
---|---|---|
committer | Chris Loer <chris.loer@mapbox.com> | 2017-04-04 11:33:12 -0700 |
commit | 5cdf838a387cae446dba500ac49a1c5524bf7949 (patch) | |
tree | 3b438034a7842c36a7804096785fca1a6ad6fa80 /src/mbgl/tile/geometry_tile_worker.hpp | |
parent | 64beba3accb0f2088b2e01fad710f915c81d99c7 (diff) | |
download | qtlocation-mapboxgl-5cdf838a387cae446dba500ac49a1c5524bf7949.tar.gz |
[core] De-mutex GlyphAtlas and SpriteAtlas
- Expose glyph and icon information to workers via message interface.
- Glyph/SpriteAtlas track which tiles have outstanding requests
and send messages to them when glyphs/icons become available.
- Remove obsolete "updateSymbolDependentTiles" pathway
- Symbol preparation for a tile now depends on all glyphs becoming
available before it can start.
- Start tracking individual icons needed for a tile, although we don't
do anything with the information yet.
- Introduce typedef for GlyphID
Diffstat (limited to 'src/mbgl/tile/geometry_tile_worker.hpp')
-rw-r--r-- | src/mbgl/tile/geometry_tile_worker.hpp | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/mbgl/tile/geometry_tile_worker.hpp b/src/mbgl/tile/geometry_tile_worker.hpp index 91bf81a697..39f4411e23 100644 --- a/src/mbgl/tile/geometry_tile_worker.hpp +++ b/src/mbgl/tile/geometry_tile_worker.hpp @@ -2,6 +2,8 @@ #include <mbgl/map/mode.hpp> #include <mbgl/tile/tile_id.hpp> +#include <mbgl/sprite/sprite_atlas.hpp> +#include <mbgl/text/glyph.hpp> #include <mbgl/text/placement_config.hpp> #include <mbgl/actor/actor_ref.hpp> #include <mbgl/util/optional.hpp> @@ -25,7 +27,6 @@ public: GeometryTileWorker(ActorRef<GeometryTileWorker> self, ActorRef<GeometryTile> parent, OverscaledTileID, - GlyphAtlas&, const std::atomic<bool>&, const MapMode); ~GeometryTileWorker(); @@ -33,20 +34,28 @@ public: void setLayers(std::vector<std::unique_ptr<style::Layer>>, uint64_t correlationID); void setData(std::unique_ptr<const GeometryTileData>, uint64_t correlationID); void setPlacementConfig(PlacementConfig, uint64_t correlationID); - void symbolDependenciesChanged(); + + void onGlyphsAvailable(GlyphPositionMap glyphs, GlyphRangeSet loadedRanges); + void onIconsAvailable(IconAtlasMap icons); private: - void coalesce(); void coalesced(); void redoLayout(); void attemptPlacement(); + + void coalesce(); + + void requestNewGlyphs(const GlyphDependencies&); + void requestNewIcons(const IconDependencyMap&); + + void symbolDependenciesChanged(); bool hasPendingSymbolDependencies() const; + bool hasPendingSymbolLayouts() const; ActorRef<GeometryTileWorker> self; ActorRef<GeometryTile> parent; const OverscaledTileID id; - GlyphAtlas& glyphAtlas; const std::atomic<bool>& obsolete; const MapMode mode; @@ -66,6 +75,10 @@ private: optional<PlacementConfig> placementConfig; std::vector<std::unique_ptr<SymbolLayout>> symbolLayouts; + GlyphDependencies pendingGlyphDependencies; + IconDependencyMap pendingIconDependencies; + GlyphPositionMap glyphPositions; + IconAtlasMap icons; }; } // namespace mbgl |