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() const38 inline bool Bucket::is<FillExtrusionBucket>() const {
39     return layerType == style::LayerType::FillExtrusion;
40 }
41 
42 } // namespace mbgl
43