#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace mbgl { class GeometryTileData; class RenderStyle; class RenderLayer; class SourceQueryOptions; class TileParameters; class GlyphAtlas; class ImageAtlas; class GeometryTile : public Tile, public GlyphRequestor, ImageRequestor { public: GeometryTile(const OverscaledTileID&, std::string sourceID, const TileParameters&); ~GeometryTile() override; void setError(std::exception_ptr); void setData(std::unique_ptr); void setPlacementConfig(const PlacementConfig&) override; void setLayers(const std::vector>&) override; void onGlyphsAvailable(GlyphMap) override; void onImagesAvailable(ImageMap) override; void getGlyphs(GlyphDependencies); void getImages(ImageDependencies); void upload(gl::Context&) override; Bucket* getBucket(const style::Layer::Impl&) const override; Size bindGlyphAtlas(gl::Context&); Size bindIconAtlas(gl::Context&); void queryRenderedFeatures( std::unordered_map>& result, const GeometryCoordinates& queryGeometry, const TransformState&, const RenderStyle&, 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; uint64_t correlationID; LayoutResult(std::unordered_map> nonSymbolBuckets_, std::unique_ptr featureIndex_, std::unique_ptr tileData_, uint64_t correlationID_) : nonSymbolBuckets(std::move(nonSymbolBuckets_)), featureIndex(std::move(featureIndex_)), tileData(std::move(tileData_)), correlationID(correlationID_) {} }; void onLayout(LayoutResult); class PlacementResult { public: std::unordered_map> symbolBuckets; std::unique_ptr collisionTile; optional glyphAtlasImage; optional iconAtlasImage; uint64_t correlationID; PlacementResult(std::unordered_map> symbolBuckets_, std::unique_ptr collisionTile_, optional glyphAtlasImage_, optional iconAtlasImage_, uint64_t correlationID_) : symbolBuckets(std::move(symbolBuckets_)), collisionTile(std::move(collisionTile_)), glyphAtlasImage(std::move(glyphAtlasImage_)), iconAtlasImage(std::move(iconAtlasImage_)), correlationID(correlationID_) {} }; void onPlacement(PlacementResult); void onError(std::exception_ptr); float yStretch() const override; protected: const GeometryTileData* getData() { return data.get(); } private: void markObsolete(); void invokePlacement(); const std::string sourceID; // 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; GlyphManager& glyphManager; ImageManager& imageManager; uint64_t correlationID = 0; optional requestedConfig; std::unordered_map> nonSymbolBuckets; std::unique_ptr featureIndex; std::unique_ptr data; optional glyphAtlasImage; optional iconAtlasImage; std::unordered_map> symbolBuckets; std::unique_ptr collisionTile; util::Throttler placementThrottler; float lastYStretch; public: optional glyphAtlasTexture; optional iconAtlasTexture; }; } // namespace mbgl