1 #pragma once
2 
3 #include <mbgl/gl/object.hpp>
4 #include <mbgl/gl/draw_mode.hpp>
5 #include <mbgl/util/ignore.hpp>
6 
7 #include <vector>
8 
9 namespace mbgl {
10 namespace gl {
11 
12 template <class DrawMode>
13 class IndexVector {
14 public:
15     static constexpr std::size_t groupSize = DrawMode::bufferGroupSize;
16 
17     template <class... Args>
emplace_back(Args &&...args)18     void emplace_back(Args&&... args) {
19         static_assert(sizeof...(args) == groupSize, "wrong buffer element count");
20         util::ignore({(v.emplace_back(std::forward<Args>(args)), 0)...});
21     }
22 
indexSize() const23     std::size_t indexSize() const { return v.size(); }
byteSize() const24     std::size_t byteSize() const { return v.size() * sizeof(uint16_t); }
25 
empty() const26     bool empty() const { return v.empty(); }
clear()27     void clear() { v.clear(); }
data() const28     const uint16_t* data() const { return v.data(); }
vector() const29     const std::vector<uint16_t>& vector() const { return v; }
30 
31 private:
32     std::vector<uint16_t> v;
33 };
34 
35 template <class DrawMode>
36 class IndexBuffer {
37 public:
38     std::size_t indexCount;
39     UniqueBuffer buffer;
40 };
41 
42 } // namespace gl
43 } // namespace mbgl
44