summaryrefslogtreecommitdiff
path: root/include/mbgl/renderer/line_bucket.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/mbgl/renderer/line_bucket.hpp')
-rw-r--r--include/mbgl/renderer/line_bucket.hpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/include/mbgl/renderer/line_bucket.hpp b/include/mbgl/renderer/line_bucket.hpp
new file mode 100644
index 0000000000..d42b10bfb7
--- /dev/null
+++ b/include/mbgl/renderer/line_bucket.hpp
@@ -0,0 +1,61 @@
+#ifndef MBGL_RENDERER_LINEBUCKET
+#define MBGL_RENDERER_LINEBUCKET
+
+#include "bucket.hpp"
+#include <mbgl/geometry/vao.hpp>
+#include <mbgl/geometry/elements_buffer.hpp>
+#include <mbgl/geometry/line_buffer.hpp>
+#include <mbgl/style/style_bucket.hpp>
+
+#include <memory>
+#include <vector>
+
+namespace mbgl {
+
+class Style;
+class LineVertexBuffer;
+class TriangleElementsBuffer;
+class LineShader;
+class LinejoinShader;
+struct pbf;
+
+class LineBucket : public Bucket {
+ typedef ElementGroup triangle_group_type;
+ typedef ElementGroup point_group_type;
+public:
+ LineBucket(LineVertexBuffer& vertexBuffer,
+ TriangleElementsBuffer& triangleElementsBuffer,
+ PointElementsBuffer& pointElementsBuffer,
+ const StyleBucketLine& properties);
+
+ virtual void render(Painter& painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id);
+ virtual bool hasData() const;
+
+ void addGeometry(pbf& data);
+ void addGeometry(const std::vector<Coordinate>& line);
+
+ bool hasPoints() const;
+
+ void drawLines(LineShader& shader);
+ void drawPoints(LinejoinShader& shader);
+
+public:
+ const StyleBucketLine &properties;
+
+private:
+
+ LineVertexBuffer& vertexBuffer;
+ TriangleElementsBuffer& triangleElementsBuffer;
+ PointElementsBuffer& pointElementsBuffer;
+
+ const size_t vertex_start;
+ const size_t triangle_elements_start;
+ const size_t point_elements_start;
+
+ std::vector<triangle_group_type> triangleGroups;
+ std::vector<point_group_type> pointGroups;
+};
+
+}
+
+#endif