1 #pragma once
2 
3 #include <mbgl/renderer/render_layer.hpp>
4 #include <mbgl/style/layers/fill_extrusion_layer_impl.hpp>
5 #include <mbgl/style/layers/fill_extrusion_layer_properties.hpp>
6 #include <mbgl/util/optional.hpp>
7 #include <mbgl/util/offscreen_texture.hpp>
8 
9 namespace mbgl {
10 
11 class RenderFillExtrusionLayer: public RenderLayer {
12 public:
13     RenderFillExtrusionLayer(Immutable<style::FillExtrusionLayer::Impl>);
14     ~RenderFillExtrusionLayer() final = default;
15 
16     void transition(const TransitionParameters&) override;
17     void evaluate(const PropertyEvaluationParameters&) override;
18     bool hasTransition() const override;
19     void render(PaintParameters&, RenderSource*) override;
20 
21     bool queryIntersectsFeature(
22         const GeometryCoordinates&,
23         const GeometryTileFeature&,
24         const float,
25         const TransformState&,
26         const float,
27         const mat4&) const override;
28 
29     std::unique_ptr<Bucket> createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const override;
30 
31     // Paint properties
32     style::FillExtrusionPaintProperties::Unevaluated unevaluated;
33     style::FillExtrusionPaintProperties::PossiblyEvaluated evaluated;
34 
35     const style::FillExtrusionLayer::Impl& impl() const;
36 
37     optional<OffscreenTexture> renderTexture;
38 };
39 
40 template <>
is() const41 inline bool RenderLayer::is<RenderFillExtrusionLayer>() const {
42     return type == style::LayerType::FillExtrusion;
43 }
44 
45 } // namespace mbgl
46