summaryrefslogtreecommitdiff
path: root/src/mbgl/gl/index_buffer.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/gl/index_buffer.hpp')
-rw-r--r--src/mbgl/gl/index_buffer.hpp39
1 files changed, 19 insertions, 20 deletions
diff --git a/src/mbgl/gl/index_buffer.hpp b/src/mbgl/gl/index_buffer.hpp
index f38d7fd4f5..b3610f4154 100644
--- a/src/mbgl/gl/index_buffer.hpp
+++ b/src/mbgl/gl/index_buffer.hpp
@@ -1,39 +1,38 @@
#pragma once
#include <mbgl/gl/object.hpp>
+#include <mbgl/gl/draw_mode.hpp>
+#include <mbgl/util/ignore.hpp>
+
+#include <vector>
namespace mbgl {
namespace gl {
-class Line {
+template <class DrawMode>
+class IndexVector {
public:
- Line(uint16_t a_, uint16_t b_)
- : a(a_), b(b_) {}
-
- uint16_t a;
- uint16_t b;
+ static constexpr std::size_t groupSize = DrawMode::bufferGroupSize;
- static constexpr std::size_t IndexCount = 2;
-};
+ template <class... Args>
+ void emplace_back(Args&&... args) {
+ static_assert(sizeof...(args) == groupSize, "wrong buffer element count");
+ util::ignore({(v.emplace_back(std::forward<Args>(args)), 0)...});
+ }
-class Triangle {
-public:
- Triangle(uint16_t a_, uint16_t b_, uint16_t c_)
- : a(a_), b(b_), c(c_) {}
+ std::size_t indexSize() const { return v.size(); }
+ std::size_t byteSize() const { return v.size() * sizeof(uint16_t); }
- uint16_t a;
- uint16_t b;
- uint16_t c;
+ bool empty() const { return v.empty(); }
+ const uint16_t* data() const { return v.data(); }
- static constexpr std::size_t IndexCount = 3;
+private:
+ std::vector<uint16_t> v;
};
-template <class Primitive>
+template <class DrawMode>
class IndexBuffer {
public:
- static_assert(std::is_same<Primitive, Line>::value || std::is_same<Primitive, Triangle>::value,
- "primitive must be Line or Triangle");
- static constexpr std::size_t primitiveSize = sizeof(Primitive);
UniqueBuffer buffer;
};