summaryrefslogtreecommitdiff
path: root/include/llmr/renderer/painter.hpp
blob: e9b475f73b4b6d2a7996cd5da5202f55dbe33204 (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
#ifndef LLMR_RENDERER_PAINTER
#define LLMR_RENDERER_PAINTER

#include "shader-fill.hpp"
#include "shader-plain.hpp"
#include "shader-outline.hpp"
#include "shader-line.hpp"

#include "../map/tile.hpp"

namespace llmr {

class Settings;
class Transform;
class Style;
class LayerDescription;

class FillBucket;
class LineBucket;

class Painter {
public:
    Painter(Transform& transform, Settings& settings, Style& style);

    // Make noncopyable
    Painter(const Painter&) = delete;
    Painter(const Painter&&) = delete;
    Painter &operator=(const Painter&) = delete;
    Painter &operator=(const Painter&&) = delete;


    void setup();
    void teardown();

    void clear();
    void render(const std::shared_ptr<Tile>& tile);
    void renderLayers(const std::shared_ptr<Tile>& tile, const std::vector<LayerDescription>& layers);
    void renderDebug(const std::shared_ptr<Tile>& tile);

    void renderMatte();
    void renderBackground();
    void renderFill(FillBucket& bucket, const std::string& layer_name);
    void renderLine(LineBucket& bucket, const std::string& layer_name);


    void drawClippingMask();
    bool switchShader(std::shared_ptr<Shader> shader);

private:
    void setupShaders();
    void changeMatrix(const std::shared_ptr<Tile>& tile);

public:

private:
    Transform& transform;
    Settings& settings;
    Style& style;

    float nativeMatrix[16];
    float matrix[16];
    float exMatrix[16];

    std::shared_ptr<Shader> currentShader;
    std::shared_ptr<FillShader> fillShader;
    std::shared_ptr<PlainShader> plainShader;
    std::shared_ptr<OutlineShader> outlineShader;
    std::shared_ptr<LineShader> lineShader;

    uint32_t tile_stencil_buffer;
    uint32_t tile_border_buffer;
    uint32_t matte_buffer;
};

}

#endif