1 // 2 // Copyright 2013 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 // IndexRangeCache.h: Defines the gl::IndexRangeCache class which stores information about 8 // ranges of indices. 9 10 #ifndef LIBANGLE_INDEXRANGECACHE_H_ 11 #define LIBANGLE_INDEXRANGECACHE_H_ 12 13 #include "angle_gl.h" 14 #include "common/PackedEnums.h" 15 #include "common/angleutils.h" 16 #include "common/mathutil.h" 17 18 #include <map> 19 20 namespace gl 21 { 22 23 class IndexRangeCache 24 { 25 public: 26 IndexRangeCache(); 27 ~IndexRangeCache(); 28 29 void addRange(DrawElementsType type, 30 size_t offset, 31 size_t count, 32 bool primitiveRestartEnabled, 33 const IndexRange &range); 34 bool findRange(DrawElementsType type, 35 size_t offset, 36 size_t count, 37 bool primitiveRestartEnabled, 38 IndexRange *outRange) const; 39 40 void invalidateRange(size_t offset, size_t size); 41 void clear(); 42 43 private: 44 struct IndexRangeKey 45 { 46 IndexRangeKey(); 47 IndexRangeKey(DrawElementsType type, size_t offset, size_t count, bool primitiveRestart); 48 49 bool operator<(const IndexRangeKey &rhs) const; 50 51 DrawElementsType type; 52 size_t offset; 53 size_t count; 54 bool primitiveRestartEnabled; 55 }; 56 57 typedef std::map<IndexRangeKey, IndexRange> IndexRangeMap; 58 IndexRangeMap mIndexRangeCache; 59 }; 60 61 } // namespace gl 62 63 #endif // LIBANGLE_INDEXRANGECACHE_H_ 64