#pragma once #include #include #include #include #include #include #include #include namespace mbgl { class BucketParameters; class RenderLineLayer; class LineBucket : public Bucket { public: LineBucket(const BucketParameters&, const std::vector&, const style::LineLayoutProperties::Unevaluated&); void addFeature(const GeometryTileFeature&, const GeometryCollection&) override; bool hasData() const override; void upload(gl::Context&) override; void render(Painter&, PaintParameters&, const RenderLayer&, const RenderTile&) override; float getQueryRadius(const RenderLayer&) const override; style::LineLayoutProperties::PossiblyEvaluated layout; gl::VertexVector vertices; gl::IndexVector triangles; SegmentVector segments; optional> vertexBuffer; optional> indexBuffer; std::map paintPropertyBinders; private: void addGeometry(const GeometryCoordinates&, FeatureType); struct TriangleElement { TriangleElement(uint16_t a_, uint16_t b_, uint16_t c_) : a(a_), b(b_), c(c_) {} uint16_t a, b, c; }; void addCurrentVertex(const GeometryCoordinate& currentVertex, double& distance, const Point& normal, double endLeft, double endRight, bool round, std::size_t startVertex, std::vector& triangleStore); void addPieSliceVertex(const GeometryCoordinate& currentVertex, double distance, const Point& extrude, bool lineTurnsLeft, std::size_t startVertex, std::vector& triangleStore); std::ptrdiff_t e1; std::ptrdiff_t e2; std::ptrdiff_t e3; const uint32_t overscaling; float getLineWidth(const RenderLineLayer& layer) const; }; } // namespace mbgl