#pragma once #include #include #include #include #include #include #include #include namespace mbgl { class LineBucket : public Bucket { public: LineBucket(uint32_t overscaling); ~LineBucket() override; void upload(gl::Context&) override; void render(Painter&, PaintParameters&, const style::Layer&, const RenderTile&) override; bool hasData() const override; void addGeometry(const GeometryCollection&); void addGeometry(const GeometryCoordinates& line); style::LineLayoutProperties::Evaluated layout; gl::VertexVector vertices; gl::IndexVector triangles; gl::SegmentVector segments; optional> vertexBuffer; optional> indexBuffer; private: 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; }; } // namespace mbgl