1 #pragma once 2 3 #include <mbgl/gl/context.hpp> 4 #include <mbgl/gl/vertex_array.hpp> 5 6 #include <cstddef> 7 #include <vector> 8 #include <map> 9 10 namespace mbgl { 11 12 template <class Attributes> 13 class Segment { 14 public: Segment(std::size_t vertexOffset_,std::size_t indexOffset_,std::size_t vertexLength_=0,std::size_t indexLength_=0)15 Segment(std::size_t vertexOffset_, 16 std::size_t indexOffset_, 17 std::size_t vertexLength_ = 0, 18 std::size_t indexLength_ = 0) 19 : vertexOffset(vertexOffset_), 20 indexOffset(indexOffset_), 21 vertexLength(vertexLength_), 22 indexLength(indexLength_) {} 23 24 const std::size_t vertexOffset; 25 const std::size_t indexOffset; 26 27 std::size_t vertexLength; 28 std::size_t indexLength; 29 30 // One VertexArray per layer ID. This minimizes rebinding in cases where 31 // several layers share buckets but have different sets of active attributes. 32 // This can happen: 33 // * when two layers have the same layout properties, but differing 34 // data-driven paint properties 35 // * when two fill layers have the same layout properties, but one 36 // uses fill-color and the other uses fill-pattern 37 mutable std::map<std::string, gl::VertexArray> vertexArrays; 38 }; 39 40 template <class Attributes> 41 using SegmentVector = std::vector<Segment<Attributes>>; 42 43 } // namespace mbgl 44