1 #pragma once 2 3 #include <mbgl/renderer/bucket.hpp> 4 #include <mbgl/map/mode.hpp> 5 #include <mbgl/tile/geometry_tile_data.hpp> 6 #include <mbgl/gl/vertex_buffer.hpp> 7 #include <mbgl/gl/index_buffer.hpp> 8 #include <mbgl/programs/segment.hpp> 9 #include <mbgl/programs/circle_program.hpp> 10 #include <mbgl/style/layers/circle_layer_properties.hpp> 11 12 namespace mbgl { 13 14 class BucketParameters; 15 16 class CircleBucket : public Bucket { 17 public: 18 CircleBucket(const BucketParameters&, const std::vector<const RenderLayer*>&); 19 20 void addFeature(const GeometryTileFeature&, 21 const GeometryCollection&) override; 22 bool hasData() const override; 23 24 void upload(gl::Context&) override; 25 26 float getQueryRadius(const RenderLayer&) const override; 27 28 gl::VertexVector<CircleLayoutVertex> vertices; 29 gl::IndexVector<gl::Triangles> triangles; 30 SegmentVector<CircleAttributes> segments; 31 32 optional<gl::VertexBuffer<CircleLayoutVertex>> vertexBuffer; 33 optional<gl::IndexBuffer<gl::Triangles>> indexBuffer; 34 35 std::map<std::string, CircleProgram::PaintPropertyBinders> paintPropertyBinders; 36 37 const MapMode mode; 38 }; 39 40 template <> is() const41inline bool Bucket::is<CircleBucket>() const { 42 return layerType == style::LayerType::Circle; 43 } 44 45 } // namespace mbgl 46