#pragma once #include #include #include #include #include #include #include #include #include #include #include namespace mbgl { class GeometryTileData; class RenderLayer; class SourceQueryOptions; class TileParameters; class GlyphAtlas; class ImageAtlas; class GeometryTile : public Tile, public GlyphRequestor, public ImageRequestor { public: GeometryTile(const OverscaledTileID&, std::string sourceID, const TileParameters&); ~GeometryTile() override; void setError(std::exception_ptr); void setData(std::unique_ptr); void setLayers(const std::vector>&) override; void setShowCollisionBoxes(const bool showCollisionBoxes) override; void onGlyphsAvailable(GlyphMap) override; void onImagesAvailable(ImageMap, ImageMap, ImageVersionMap versionMap, uint64_t imageCorrelationID) override; void getGlyphs(GlyphDependencies); void getImages(ImageRequestPair); void upload(gfx::UploadPass&) override; Bucket* getBucket(const style::Layer::Impl&) const override; const LayerRenderData* getLayerRenderData(const style::Layer::Impl&) const override; bool updateLayerProperties(const Immutable&) override; void queryRenderedFeatures( std::unordered_map>& result, const GeometryCoordinates& queryGeometry, const TransformState&, const std::vector& layers, const RenderedQueryOptions& options, const mat4& projMatrix) override; void querySourceFeatures( std::vector& result, const SourceQueryOptions&) override; float getQueryPadding(const std::vector&) override; void cancel() override; class LayoutResult { public: std::unordered_map renderData; std::unique_ptr featureIndex; optional glyphAtlasImage; ImageAtlas iconAtlas; LayoutResult(std::unordered_map renderData_, std::unique_ptr featureIndex_, optional glyphAtlasImage_, ImageAtlas iconAtlas_) : renderData(std::move(renderData_)), featureIndex(std::move(featureIndex_)), glyphAtlasImage(std::move(glyphAtlasImage_)), iconAtlas(std::move(iconAtlas_)) {} }; void onLayout(LayoutResult, uint64_t correlationID); void onError(std::exception_ptr, uint64_t correlationID); bool holdForFade() const override; void markRenderedIdeal() override; void markRenderedPreviously() override; void performedFadePlacement() override; const optional getPattern(const std::string& pattern); const std::shared_ptr getFeatureIndex() const { return latestFeatureIndex; } const std::string sourceID; protected: const GeometryTileData* getData() { return latestFeatureIndex ? latestFeatureIndex->getData() : nullptr; } LayerRenderData* getMutableLayerRenderData(const style::Layer::Impl&); private: void markObsolete(); // 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; std::shared_ptr fileSource; GlyphManager& glyphManager; ImageManager& imageManager; uint64_t correlationID = 0; std::unordered_map layerIdToLayerRenderData; std::shared_ptr latestFeatureIndex; optional glyphAtlasImage; ImageAtlas iconAtlas; const MapMode mode; bool showCollisionBoxes; enum class FadeState { Loaded, NeedsFirstPlacement, NeedsSecondPlacement, CanRemove }; FadeState fadeState = FadeState::Loaded; public: optional glyphAtlasTexture; optional iconAtlasTexture; }; } // namespace mbgl