1 #pragma once
2 
3 #include <mbgl/renderer/render_layer.hpp>
4 #include <mbgl/style/layers/heatmap_layer_impl.hpp>
5 #include <mbgl/style/layers/heatmap_layer_properties.hpp>
6 #include <mbgl/util/optional.hpp>
7 #include <mbgl/util/offscreen_texture.hpp>
8 
9 namespace mbgl {
10 
11 class RenderHeatmapLayer: public RenderLayer {
12 public:
13     RenderHeatmapLayer(Immutable<style::HeatmapLayer::Impl>);
14     ~RenderHeatmapLayer() 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     void updateColorRamp();
30 
31     std::unique_ptr<Bucket> createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const override;
32 
33     // Paint properties
34     style::HeatmapPaintProperties::Unevaluated unevaluated;
35     style::HeatmapPaintProperties::PossiblyEvaluated evaluated;
36 
37     const style::HeatmapLayer::Impl& impl() const;
38 
39     PremultipliedImage colorRamp;
40     optional<OffscreenTexture> renderTexture;
41     optional<gl::Texture> colorRampTexture;
42 };
43 
44 template <>
is() const45 inline bool RenderLayer::is<RenderHeatmapLayer>() const {
46     return type == style::LayerType::Heatmap;
47 }
48 
49 } // namespace mbgl
50