#pragma once #include #include #include #include #include #include namespace mbgl { class Bucket; class BucketParameters; class TransitionParameters; class PropertyEvaluationParameters; class Painter; class PaintParameters; class RenderSource; class RenderTile; class RenderLayer { protected: RenderLayer(style::LayerType, Immutable); const style::LayerType type; public: static std::unique_ptr create(Immutable); virtual ~RenderLayer() = default; // Begin transitions for any properties that have changed since the last frame. virtual void transition(const TransitionParameters&) = 0; // Fully evaluate possibly-transitioning paint properties based on a zoom level. virtual void evaluate(const PropertyEvaluationParameters&) = 0; // Returns true if any paint properties have active transitions. virtual bool hasTransition() const = 0; // Check whether this layer is of the given subtype. template bool is() const; // Dynamically cast this layer to the given subtype. template T* as() { return is() ? reinterpret_cast(this) : nullptr; } template const T* as() const { return is() ? reinterpret_cast(this) : nullptr; } const std::string& getID() const; // Checks whether this layer needs to be rendered in the given render pass. bool hasRenderPass(RenderPass) const; // Checks whether this layer can be rendered. bool needsRendering(float zoom) const; virtual void render(Painter&, PaintParameters&, RenderSource*); // Check wether the given geometry intersects // with the feature virtual bool queryIntersectsFeature( const GeometryCoordinates&, const GeometryTileFeature&, const float, const float, const float) const { return false; }; virtual std::unique_ptr createBucket(const BucketParameters&, const std::vector&) const = 0; void setRenderTiles(std::vector>); // Private implementation Immutable baseImpl; void setImpl(Immutable); friend std::string layoutKey(const RenderLayer&); protected: // Stores what render passes this layer is currently enabled for. This depends on the // evaluated StyleProperties object and is updated accordingly. RenderPass passes = RenderPass::None; //Stores current set of tiles to be rendered for this layer. std::vector> renderTiles; }; } // namespace mbgl