#pragma once #include #include #include #include #include #include #include #include #include #include #include #include namespace mbgl { class GeometryTileData; class FeatureIndex; class CollisionTile; class RenderLayer; class SourceQueryOptions; class TileParameters; namespace style { class Style; } // namespace style class GeometryTile : public Tile, public GlyphRequestor, IconRequestor { public: GeometryTile(const OverscaledTileID&, std::string sourceID, const TileParameters&, GlyphAtlas&, SpriteAtlas&); ~GeometryTile() override; void setError(std::exception_ptr); void setData(std::unique_ptr); void setPlacementConfig(const PlacementConfig&) override; void redoLayout() override; void onGlyphsAvailable(GlyphPositionMap) override; void onIconsAvailable(IconMap) override; void getGlyphs(GlyphDependencies); void getIcons(IconDependencies); Bucket* getBucket(const RenderLayer&) const override; void queryRenderedFeatures( std::unordered_map>& result, const GeometryCoordinates& queryGeometry, const TransformState&, const RenderedQueryOptions& options) override; void querySourceFeatures( std::vector& result, const SourceQueryOptions&) override; void cancel() override; class LayoutResult { public: std::unordered_map> nonSymbolBuckets; std::unique_ptr featureIndex; std::unique_ptr tileData; }; void onLayout(LayoutResult, uint64_t correlationID); class PlacementResult { public: std::unordered_map> symbolBuckets; std::unique_ptr collisionTile; }; void onPlacement(PlacementResult, uint64_t correlationID); void onError(std::exception_ptr, uint64_t correlationID); protected: const GeometryTileData* getData() { return data.get(); } private: void invokePlacement(); const std::string sourceID; style::Style& style; // Used to signal the worker that it should abandon parsing this tile as soon as possible. std::atomic obsolete { false }; std::shared_ptr mailbox; Actor worker; GlyphAtlas& glyphAtlas; SpriteAtlas& spriteAtlas; uint64_t correlationID = 0; optional requestedConfig; std::unordered_map> nonSymbolBuckets; std::unique_ptr featureIndex; std::unique_ptr data; std::unordered_map> symbolBuckets; std::unique_ptr collisionTile; util::Throttler placementThrottler; }; } // namespace mbgl