1 #pragma once
2 
3 #include <mbgl/renderer/render_layer.hpp>
4 #include <mbgl/style/layers/line_layer_impl.hpp>
5 #include <mbgl/style/layers/line_layer_properties.hpp>
6 #include <mbgl/programs/uniforms.hpp>
7 
8 namespace mbgl {
9 
10 struct LineFloorwidth : style::DataDrivenPaintProperty<float, attributes::a_floorwidth, uniforms::u_floorwidth> {
defaultValuembgl::LineFloorwidth11     static float defaultValue() { return 1; }
12 };
13 
14 class RenderLinePaintProperties : public style::ConcatenateProperties<
15     style::LinePaintProperties::PropertyTypes,
16     TypeList<LineFloorwidth>>::Type {};
17 
18 class RenderLineLayer: public RenderLayer {
19 public:
20     RenderLineLayer(Immutable<style::LineLayer::Impl>);
21     ~RenderLineLayer() final = default;
22 
23     void transition(const TransitionParameters&) override;
24     void evaluate(const PropertyEvaluationParameters&) override;
25     bool hasTransition() const override;
26     void render(PaintParameters&, RenderSource*) override;
27 
28     bool queryIntersectsFeature(
29             const GeometryCoordinates&,
30             const GeometryTileFeature&,
31             const float,
32             const TransformState&,
33             const float,
34             const mat4&) const override;
35 
36     std::unique_ptr<Bucket> createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const override;
37 
38     // Paint properties
39     style::LinePaintProperties::Unevaluated unevaluated;
40     RenderLinePaintProperties::PossiblyEvaluated evaluated;
41 
42     const style::LineLayer::Impl& impl() const;
43 
44 private:
45     float getLineWidth(const GeometryTileFeature&, const float) const;
46 };
47 
48 template <>
is() const49 inline bool RenderLayer::is<RenderLineLayer>() const {
50     return type == style::LayerType::Line;
51 }
52 
53 } // namespace mbgl
54