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