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