#pragma once #include #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; namespace gfx { class UploadPass; } // namespace gfx 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 upload(gfx::UploadPass&) = 0; virtual void prepare(PaintParameters&) = 0; virtual void finishRender(PaintParameters&) = 0; // Returns a list of RenderTiles, sorted by tile id. virtual std::vector> getRenderTiles() = 0; virtual std::unordered_map> queryRenderedFeatures(const ScreenLineString& geometry, const TransformState& transformState, const std::vector& layers, const RenderedQueryOptions& options, const mat4& projMatrix) const = 0; virtual std::vector querySourceFeatures(const SourceQueryOptions&) const = 0; virtual FeatureExtensionValue queryFeatureExtensions(const Feature&, const std::string&, const std::string&, const optional>&) const { return {}; } virtual void reduceMemoryUse() = 0; virtual void dumpDebugLogs() const = 0; void setObserver(RenderSourceObserver*); Immutable baseImpl; protected: RenderSource(Immutable); RenderSourceObserver* observer; bool enabled = false; void onTileChanged(Tile&) override; void onTileError(Tile&, std::exception_ptr) final; }; } // namespace mbgl