#pragma once #include #include #include #include namespace mbgl { /** * @brief Base class for render sources that provide render tiles. */ class RenderTileSource : public RenderSource { public: ~RenderTileSource() override; bool isLoaded() const override; std::unique_ptr createRenderItem() override; void prepare(const SourcePrepareParameters&) override; void updateFadingTiles() override; bool hasFadingTiles() const override; RenderTiles getRenderTiles() const override; RenderTiles getRenderTilesSortedByYPosition() const override; const Tile* getRenderedTile(const UnwrappedTileID&) const override; std::unordered_map> queryRenderedFeatures(const ScreenLineString& geometry, const TransformState& transformState, const std::unordered_map& layers, const RenderedQueryOptions& options, const mat4& projMatrix) const override; std::vector querySourceFeatures(const SourceQueryOptions&) const override; virtual void setFeatureState(const optional&, const std::string&, const FeatureState&) override; virtual void getFeatureState(FeatureState& state, const optional&, const std::string&) const override; void reduceMemoryUse() override; void dumpDebugLogs() const override; protected: RenderTileSource(Immutable); TilePyramid tilePyramid; Immutable> renderTiles; mutable RenderTiles filteredRenderTiles; mutable RenderTiles renderTilesSortedByY; float bearing = 0.0f; SourceFeatureState featureState; }; /** * @brief Base class for render sources that use tile sets. */ class RenderTileSetSource : public RenderTileSource { protected: RenderTileSetSource(Immutable); ~RenderTileSetSource() override; virtual void updateInternal(const Tileset&, const std::vector>&, bool needsRendering, bool needsRelayout, const TileParameters&) = 0; // Returns tileset from the current impl. virtual const optional& getTileset() const = 0; private: uint8_t getMaxZoom() const final; void update(Immutable, const std::vector>&, bool needsRendering, bool needsRelayout, const TileParameters&) final; optional cachedTileset; }; } // namespace mbgl