summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/render_tree.hpp
blob: cf62ccb03e15178eae97822cf6588ca574dbaefc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#pragma once

#include <mbgl/renderer/paint_parameters.hpp>

#include <cassert>
#include <memory>
#include <string>
#include <vector>

namespace mbgl {

class PaintParameters;
class PatternAtlas;

namespace gfx {
class UploadPass;
} // namespace gfx

class RenderItem {
public:
    virtual ~RenderItem() = default;
    virtual void upload(gfx::UploadPass&) const = 0;
    virtual void render(PaintParameters&) const = 0;
    virtual bool hasRenderPass(RenderPass) const = 0;
    virtual const std::string& getName() const = 0; 
};

using RenderItems = std::vector<std::reference_wrapper<const RenderItem>>;

class RenderTreeParameters {
public:
    explicit RenderTreeParameters(
        const TransformState& state_,
        MapMode mapMode_,
        MapDebugOptions debugOptions_,
        TimePoint timePoint_,
        const EvaluatedLight& light_)
        : transformParams(state_),
          mapMode(mapMode_),
          debugOptions(debugOptions_),
          timePoint(timePoint_),
          light(light_) {
    }
    TransformParameters transformParams;
    MapMode mapMode;
    MapDebugOptions debugOptions;
    TimePoint timePoint;
    EvaluatedLight light;
    bool has3D = false;
    uint32_t opaquePassCutOff = 0;
    Color backgroundColor;
    float symbolFadeChange = 0.0f;
    bool needsRepaint = false;
    bool loaded = false;
};

class RenderTree {
public:
    virtual ~RenderTree() = default;
    // Render items
    virtual RenderItems getLayerRenderItems() const = 0;
    virtual RenderItems getSourceRenderItems() const = 0;
    // Resources
    virtual LineAtlas& getLineAtlas() const = 0;
    virtual PatternAtlas& getPatternAtlas() const = 0;
    // Parameters
    const RenderTreeParameters& getParameters() const {
        return *parameters;
    }
protected:
    RenderTree(std::unique_ptr<RenderTreeParameters> parameters_)
        : parameters(std::move(parameters_)) {
        assert(parameters);
    }
    std::unique_ptr<RenderTreeParameters> parameters;
};


} // namespace mbgl