1 #pragma once 2 3 #include <mbgl/map/mode.hpp> 4 #include <mbgl/tile/tile_id.hpp> 5 #include <mbgl/style/image_impl.hpp> 6 #include <mbgl/text/glyph.hpp> 7 #include <mbgl/actor/actor_ref.hpp> 8 #include <mbgl/util/optional.hpp> 9 #include <mbgl/util/immutable.hpp> 10 #include <mbgl/style/layer_impl.hpp> 11 #include <mbgl/geometry/feature_index.hpp> 12 #include <mbgl/renderer/bucket.hpp> 13 14 #include <atomic> 15 #include <memory> 16 17 namespace mbgl { 18 19 class GeometryTile; 20 class GeometryTileData; 21 class SymbolLayout; 22 23 namespace style { 24 class Layer; 25 } // namespace style 26 27 class GeometryTileWorker { 28 public: 29 GeometryTileWorker(ActorRef<GeometryTileWorker> self, 30 ActorRef<GeometryTile> parent, 31 OverscaledTileID, 32 const std::string&, 33 const std::atomic<bool>&, 34 const MapMode, 35 const float pixelRatio, 36 const bool showCollisionBoxes_); 37 ~GeometryTileWorker(); 38 39 void setLayers(std::vector<Immutable<style::Layer::Impl>>, uint64_t correlationID); 40 void setData(std::unique_ptr<const GeometryTileData>, uint64_t correlationID); 41 void setShowCollisionBoxes(bool showCollisionBoxes_, uint64_t correlationID_); 42 43 void onGlyphsAvailable(GlyphMap glyphs); 44 void onImagesAvailable(ImageMap images, uint64_t imageCorrelationID); 45 46 private: 47 void coalesced(); 48 void parse(); 49 void performSymbolLayout(); 50 51 void coalesce(); 52 53 void requestNewGlyphs(const GlyphDependencies&); 54 void requestNewImages(const ImageDependencies&); 55 56 void symbolDependenciesChanged(); 57 bool hasPendingSymbolDependencies() const; 58 bool hasPendingParseResult() const; 59 60 ActorRef<GeometryTileWorker> self; 61 ActorRef<GeometryTile> parent; 62 63 const OverscaledTileID id; 64 const std::string sourceID; 65 const std::atomic<bool>& obsolete; 66 const MapMode mode; 67 const float pixelRatio; 68 69 std::unique_ptr<FeatureIndex> featureIndex; 70 std::unordered_map<std::string, std::shared_ptr<Bucket>> buckets; 71 72 enum State { 73 Idle, 74 Coalescing, 75 NeedsParse, 76 NeedsSymbolLayout 77 }; 78 79 State state = Idle; 80 uint64_t correlationID = 0; 81 uint64_t imageCorrelationID = 0; 82 83 // Outer optional indicates whether we've received it or not. 84 optional<std::vector<Immutable<style::Layer::Impl>>> layers; 85 optional<std::unique_ptr<const GeometryTileData>> data; 86 87 bool symbolLayoutsNeedPreparation = false; 88 std::vector<std::unique_ptr<SymbolLayout>> symbolLayouts; 89 GlyphDependencies pendingGlyphDependencies; 90 ImageDependencies pendingImageDependencies; 91 GlyphMap glyphMap; 92 ImageMap imageMap; 93 94 bool showCollisionBoxes; 95 bool firstLoad = true; 96 }; 97 98 } // namespace mbgl 99