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