#pragma once #include #include #include #include #include #include #include #include #include namespace mbgl { class BucketParameters; class RenderLineLayer; class LineBucket : public Bucket { public: // These aliases are used by the PatternLayout template using RenderLayerType = RenderLineLayer; using PossiblyEvaluatedPaintProperties = RenderLinePaintProperties::PossiblyEvaluated; using PossiblyEvaluatedLayoutProperties = style::LineLayoutProperties::PossiblyEvaluated; LineBucket(const PossiblyEvaluatedLayoutProperties layout, std::map layerPaintProperties, const float zoom, const uint32_t overscaling); void addFeature(const GeometryTileFeature&, const GeometryCollection&, const mbgl::ImagePositions& patternPositions, const PatternLayerMap&) override; bool hasData() const override; void upload(gl::Context&) override; float getQueryRadius(const RenderLayer&) const override; PossiblyEvaluatedLayoutProperties layout; gl::VertexVector vertices; gl::IndexVector triangles; SegmentVector segments; optional> vertexBuffer; optional> indexBuffer; std::map paintPropertyBinders; private: void addGeometry(const GeometryCoordinates&, const GeometryTileFeature&); struct TriangleElement { TriangleElement(uint16_t a_, uint16_t b_, uint16_t c_) : a(a_), b(b_), c(c_) {} uint16_t a, b, c; }; class Distances; void addCurrentVertex(const GeometryCoordinate& currentVertex, double& distance, const Point& normal, double endLeft, double endRight, bool round, std::size_t startVertex, std::vector& triangleStore, optional distances); void addPieSliceVertex(const GeometryCoordinate& currentVertex, double distance, const Point& extrude, bool lineTurnsLeft, std::size_t startVertex, std::vector& triangleStore, optional distances); std::ptrdiff_t e1; std::ptrdiff_t e2; std::ptrdiff_t e3; const float zoom; const uint32_t overscaling; float getLineWidth(const RenderLineLayer& layer) const; }; template <> inline bool Bucket::is() const { return layerType == style::LayerType::Line; } } // namespace mbgl