#ifndef MBGL_RENDERER_LINEBUCKET #define MBGL_RENDERER_LINEBUCKET #include #include #include #include #include #include #include #include namespace mbgl { class Style; class LineVertexBuffer; class TriangleElementsBuffer; class LineShader; class LineSDFShader; class LinepatternShader; class LineBucket : public Bucket { using TriangleGroup = ElementGroup<3>; public: LineBucket(); ~LineBucket() override; void upload() override; void render(Painter&, const StyleLayer&, const TileID&, const mat4&) override; bool hasData() const override; void addGeometry(const GeometryCollection&); void addGeometry(const std::vector& line); void drawLines(LineShader& shader); void drawLineSDF(LineSDFShader& shader); void drawLinePatterns(LinepatternShader& shader); 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 Coordinate& currentVertex, float flip, double distance, const vec2& normal, float endLeft, float endRight, bool round, GLint startVertex, std::vector& triangleStore); void addPieSliceVertex(const Coordinate& currentVertex, float flip, double distance, const vec2& extrude, bool lineTurnsLeft, GLint startVertex, std::vector& triangleStore); public: LineLayoutProperties layout; private: LineVertexBuffer vertexBuffer; TriangleElementsBuffer triangleElementsBuffer; GLint e1; GLint e2; GLint e3; std::vector> triangleGroups; }; } #endif