#pragma once #include #include #include #include #include #include #include #include #include #include #include namespace mbgl { class PaintParameters; class TransformState; class RenderTile; class RenderLayer; class RenderedQueryOptions; class SourceQueryOptions; class Tile; class RenderSourceObserver; class TileParameters; class CollisionIndex; class RenderSource : protected TileObserver { public: static std::unique_ptr create(Immutable); // Check whether this source is of the given subtype. template bool is() const; // Dynamically cast this source to the given subtype. template T* as() { return is() ? reinterpret_cast(this) : nullptr; } template const T* as() const { return is() ? reinterpret_cast(this) : nullptr; } bool isEnabled() const; virtual bool isLoaded() const = 0; virtual void update(Immutable, const std::vector>&, bool needsRendering, bool needsRelayout, const TileParameters&) = 0; virtual void startRender(PaintParameters&) = 0; virtual void finishRender(PaintParameters&) = 0; // Returns an unsorted list of RenderTiles. virtual std::vector> getRenderTiles() = 0; virtual std::unordered_map> queryRenderedFeatures(const ScreenLineString& geometry, const TransformState& transformState, const std::vector& layers, const RenderedQueryOptions& options, const CollisionIndex& collisionIndex) const = 0; virtual std::vector querySourceFeatures(const SourceQueryOptions&) const = 0; virtual void onLowMemory() = 0; virtual void dumpDebugLogs() const = 0; void setObserver(RenderSourceObserver*); Immutable baseImpl; protected: RenderSource(Immutable); RenderSourceObserver* observer; bool enabled = false; void onTileChanged(Tile&) final; void onTileError(Tile&, std::exception_ptr) final; }; } // namespace mbgl