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/background.hpp>
7 #include <mbgl/shaders/background_pattern.hpp>
8 #include <mbgl/util/geometry.hpp>
9 #include <mbgl/util/mat4.hpp>
10 #include <mbgl/util/size.hpp>
11 #include <mbgl/style/layers/background_layer_properties.hpp>
12 
13 #include <string>
14 
15 namespace mbgl {
16 
17 class ImagePosition;
18 class UnwrappedTileID;
19 class TransformState;
20 template <class> class Faded;
21 
22 using BackgroundLayoutAttributes = PositionOnlyLayoutAttributes;
23 
24 struct BackgroundUniforms : gl::Uniforms<
25     uniforms::u_matrix,
26     uniforms::u_color,
27     uniforms::u_opacity>
28 {};
29 
30 struct BackgroundPatternUniforms : gl::Uniforms<
31     uniforms::u_matrix,
32     uniforms::u_opacity,
33     uniforms::u_texsize,
34     uniforms::u_pattern_tl_a,
35     uniforms::u_pattern_br_a,
36     uniforms::u_pattern_tl_b,
37     uniforms::u_pattern_br_b,
38     uniforms::u_pattern_size_a,
39     uniforms::u_pattern_size_b,
40     uniforms::u_scale_a,
41     uniforms::u_scale_b,
42     uniforms::u_mix,
43     uniforms::u_image,
44     uniforms::u_pixel_coord_upper,
45     uniforms::u_pixel_coord_lower,
46     uniforms::u_tile_units_to_pixels>
47 {
48     static Values values(mat4 matrix,
49                          float opacity,
50                          Size atlasSize,
51                          const ImagePosition&,
52                          const ImagePosition&,
53                          const Faded<std::string>&,
54                          const UnwrappedTileID&,
55                          const TransformState&);
56 };
57 
58 class BackgroundProgram : public Program<
59     shaders::background,
60     gl::Triangle,
61     BackgroundLayoutAttributes,
62     BackgroundUniforms,
63     style::Properties<>>
64 {
65 public:
66     using Program::Program;
67 };
68 
69 class BackgroundPatternProgram : public Program<
70     shaders::background_pattern,
71     gl::Triangle,
72     BackgroundLayoutAttributes,
73     BackgroundPatternUniforms,
74     style::Properties<>>
75 {
76 public:
77     using Program::Program;
78 };
79 
80 using BackgroundLayoutVertex = BackgroundProgram::LayoutVertex;
81 using BackgroundAttributes = BackgroundProgram::Attributes;
82 
83 } // namespace mbgl
84