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/raster.hpp>
7 #include <mbgl/util/geometry.hpp>
8 #include <mbgl/style/layers/raster_layer_properties.hpp>
9 
10 namespace mbgl {
11 
12 namespace uniforms {
13 MBGL_DEFINE_UNIFORM_SCALAR(gl::TextureUnit, u_image0);
14 MBGL_DEFINE_UNIFORM_SCALAR(gl::TextureUnit, u_image1);
15 MBGL_DEFINE_UNIFORM_SCALAR(float, u_fade_t);
16 MBGL_DEFINE_UNIFORM_SCALAR(float, u_buffer_scale);
17 MBGL_DEFINE_UNIFORM_SCALAR(float, u_brightness_low);
18 MBGL_DEFINE_UNIFORM_SCALAR(float, u_brightness_high);
19 MBGL_DEFINE_UNIFORM_SCALAR(float, u_saturation_factor);
20 MBGL_DEFINE_UNIFORM_SCALAR(float, u_contrast_factor);
21 MBGL_DEFINE_UNIFORM_SCALAR(float, u_scale_parent);
22 MBGL_DEFINE_UNIFORM_VECTOR(float, 3, u_spin_weights);
23 MBGL_DEFINE_UNIFORM_VECTOR(float, 2, u_tl_parent);
24 } // namespace uniforms
25 
26 class RasterProgram : public Program<
27     shaders::raster,
28     gl::Triangle,
29     gl::Attributes<
30         attributes::a_pos,
31         attributes::a_texture_pos>,
32     gl::Uniforms<
33         uniforms::u_matrix,
34         uniforms::u_image0,
35         uniforms::u_image1,
36         uniforms::u_opacity,
37         uniforms::u_fade_t,
38         uniforms::u_brightness_low,
39         uniforms::u_brightness_high,
40         uniforms::u_saturation_factor,
41         uniforms::u_contrast_factor,
42         uniforms::u_spin_weights,
43         uniforms::u_buffer_scale,
44         uniforms::u_scale_parent,
45         uniforms::u_tl_parent>,
46     style::RasterPaintProperties>
47 {
48 public:
49     using Program::Program;
50 
layoutVertex(Point<int16_t> p,Point<uint16_t> t)51     static LayoutVertex layoutVertex(Point<int16_t> p, Point<uint16_t> t) {
52         return LayoutVertex {
53             {{
54                 p.x,
55                 p.y
56             }},
57             {{
58                 t.x,
59                 t.y
60             }}
61         };
62     }
63 };
64 
65 using RasterLayoutVertex = RasterProgram::LayoutVertex;
66 using RasterAttributes = RasterProgram::Attributes;
67 
68 } // namespace mbgl
69