1 #pragma once
2 
3 #include <mbgl/programs/program.hpp>
4 #include <mbgl/programs/attributes.hpp>
5 #include <mbgl/programs/uniforms.hpp>
6 #include <mbgl/shaders/fill.hpp>
7 #include <mbgl/shaders/fill_pattern.hpp>
8 #include <mbgl/shaders/fill_outline.hpp>
9 #include <mbgl/shaders/fill_outline_pattern.hpp>
10 #include <mbgl/util/geometry.hpp>
11 #include <mbgl/util/mat4.hpp>
12 #include <mbgl/util/size.hpp>
13 #include <mbgl/style/layers/fill_layer_properties.hpp>
14 
15 #include <string>
16 
17 namespace mbgl {
18 
19 class ImagePosition;
20 class UnwrappedTileID;
21 class TransformState;
22 template <class> class Faded;
23 
24 using FillLayoutAttributes = PositionOnlyLayoutAttributes;
25 
26 struct FillUniforms : gl::Uniforms<
27     uniforms::u_matrix,
28     uniforms::u_world>
29 {};
30 
31 struct FillPatternUniforms : gl::Uniforms<
32     uniforms::u_matrix,
33     uniforms::u_world,
34     uniforms::u_texsize,
35     uniforms::u_pattern_tl_a,
36     uniforms::u_pattern_br_a,
37     uniforms::u_pattern_tl_b,
38     uniforms::u_pattern_br_b,
39     uniforms::u_pattern_size_a,
40     uniforms::u_pattern_size_b,
41     uniforms::u_scale_a,
42     uniforms::u_scale_b,
43     uniforms::u_mix,
44     uniforms::u_image,
45     uniforms::u_pixel_coord_upper,
46     uniforms::u_pixel_coord_lower,
47     uniforms::u_tile_units_to_pixels>
48 {
49     static Values values(mat4 matrix,
50                          Size framebufferSize,
51                          Size atlasSize,
52                          const ImagePosition&,
53                          const ImagePosition&,
54                          const Faded<std::string>&,
55                          const UnwrappedTileID&,
56                          const TransformState&);
57 };
58 
59 class FillProgram : public Program<
60     shaders::fill,
61     gl::Triangle,
62     FillLayoutAttributes,
63     FillUniforms,
64     style::FillPaintProperties>
65 {
66 public:
67     using Program::Program;
68 
layoutVertex(Point<int16_t> p)69     static LayoutVertex layoutVertex(Point<int16_t> p) {
70         return LayoutVertex {
71             {{
72                 p.x,
73                 p.y
74             }}
75         };
76     }
77 };
78 
79 class FillPatternProgram : public Program<
80     shaders::fill_pattern,
81     gl::Triangle,
82     FillLayoutAttributes,
83     FillPatternUniforms,
84     style::FillPaintProperties>
85 {
86 public:
87     using Program::Program;
88 };
89 
90 class FillOutlineProgram : public Program<
91     shaders::fill_outline,
92     gl::Line,
93     FillLayoutAttributes,
94     FillUniforms,
95     style::FillPaintProperties>
96 {
97 public:
98     using Program::Program;
99 };
100 
101 class FillOutlinePatternProgram : public Program<
102     shaders::fill_outline_pattern,
103     gl::Line,
104     FillLayoutAttributes,
105     FillPatternUniforms,
106     style::FillPaintProperties>
107 {
108 public:
109     using Program::Program;
110 };
111 
112 using FillLayoutVertex = FillProgram::LayoutVertex;
113 using FillAttributes = FillProgram::Attributes;
114 
115 } // namespace mbgl
116