1 #pragma once
2 
3 #include <mbgl/renderer/render_layer.hpp>
4 #include <mbgl/style/layers/hillshade_layer_impl.hpp>
5 #include <mbgl/style/layers/hillshade_layer_properties.hpp>
6 #include <mbgl/tile/tile_id.hpp>
7 
8 namespace mbgl {
9 
10 class RenderHillshadeLayer: public RenderLayer {
11 public:
12     RenderHillshadeLayer(Immutable<style::HillshadeLayer::Impl>);
13     ~RenderHillshadeLayer() final = default;
14 
15     void transition(const TransitionParameters&) override;
16     void evaluate(const PropertyEvaluationParameters&) override;
17     bool hasTransition() const override;
18 
19     void render(PaintParameters&, RenderSource* src) override;
20 
21     std::unique_ptr<Bucket> createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const override;
22 
23     // Paint properties
24     style::HillshadePaintProperties::Unevaluated unevaluated;
25     style::HillshadePaintProperties::PossiblyEvaluated evaluated;
26 
27     const style::HillshadeLayer::Impl& impl() const;
28 private:
29     const std::array<float, 2> getLatRange(const UnwrappedTileID& id);
30     const std::array<float, 2> getLight(const PaintParameters& parameters);
31 };
32 
33 template <>
is() const34 inline bool RenderLayer::is<RenderHillshadeLayer>() const {
35     return type == style::LayerType::Hillshade;
36 }
37 
38 } // namespace mbgl
39