#pragma once #include #include #include #include #include #include #include #include #include namespace mbgl { class GeometryTile; class GeometryTileData; class GlyphAtlas; class SymbolLayout; class RenderLayer; namespace style { class Layer; } // namespace style class GeometryTileWorker { public: GeometryTileWorker(ActorRef self, ActorRef parent, OverscaledTileID, const std::atomic&, const MapMode); ~GeometryTileWorker(); void setLayers(std::vector>, uint64_t correlationID); void setData(std::unique_ptr, uint64_t correlationID); void setPlacementConfig(PlacementConfig, uint64_t correlationID); void onGlyphsAvailable(GlyphPositionMap glyphs); void onIconsAvailable(IconMap icons); private: void coalesced(); void redoLayout(); void attemptPlacement(); void coalesce(); void requestNewGlyphs(const GlyphDependencies&); void requestNewIcons(const IconDependencies&); void symbolDependenciesChanged(); bool hasPendingSymbolDependencies() const; bool hasPendingSymbolLayouts() const; ActorRef self; ActorRef parent; const OverscaledTileID id; const std::atomic& obsolete; const MapMode mode; enum State { Idle, Coalescing, NeedLayout, NeedPlacement }; State state = Idle; uint64_t correlationID = 0; // Outer optional indicates whether we've received it or not. optional>> layers; optional> data; optional placementConfig; std::vector> symbolLayouts; GlyphDependencies pendingGlyphDependencies; IconDependencies pendingIconDependencies; GlyphPositionMap glyphPositions; IconMap icons; }; } // namespace mbgl