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