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/circle.hpp> 7 #include <mbgl/util/geometry.hpp> 8 #include <mbgl/style/layers/circle_layer_properties.hpp> 9 10 namespace mbgl { 11 12 namespace uniforms { 13 MBGL_DEFINE_UNIFORM_SCALAR(bool, u_scale_with_map); 14 } // namespace uniforms 15 16 class CircleProgram : public Program< 17 shaders::circle, 18 gl::Triangle, 19 gl::Attributes< 20 attributes::a_pos>, 21 gl::Uniforms< 22 uniforms::u_matrix, 23 uniforms::u_scale_with_map, 24 uniforms::u_extrude_scale, 25 uniforms::u_camera_to_center_distance, 26 uniforms::u_pitch_with_map>, 27 style::CirclePaintProperties> 28 { 29 public: 30 using Program::Program; 31 32 /* 33 * @param {number} x vertex position 34 * @param {number} y vertex position 35 * @param {number} ex extrude normal 36 * @param {number} ey extrude normal 37 */ vertex(Point<int16_t> p,float ex,float ey)38 static LayoutVertex vertex(Point<int16_t> p, float ex, float ey) { 39 return LayoutVertex { 40 {{ 41 static_cast<int16_t>((p.x * 2) + ((ex + 1) / 2)), 42 static_cast<int16_t>((p.y * 2) + ((ey + 1) / 2)) 43 }} 44 }; 45 } 46 }; 47 48 using CircleLayoutVertex = CircleProgram::LayoutVertex; 49 using CircleAttributes = CircleProgram::Attributes; 50 51 } // namespace mbgl 52