| // | |
| // Copyright 2013 The ANGLE Project Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // | |
| // IndexRangeCache.h: Defines the gl::IndexRangeCache class which stores information about | |
| // ranges of indices. | |
| #ifndef LIBANGLE_INDEXRANGECACHE_H_ | |
| #define LIBANGLE_INDEXRANGECACHE_H_ | |
| #include "angle_gl.h" | |
| #include "common/PackedEnums.h" | |
| #include "common/angleutils.h" | |
| #include "common/mathutil.h" | |
| #include <map> | |
| namespace gl | |
| { | |
| class IndexRangeCache | |
| { | |
| public: | |
| IndexRangeCache(); | |
| ~IndexRangeCache(); | |
| void addRange(DrawElementsType type, | |
| size_t offset, | |
| size_t count, | |
| bool primitiveRestartEnabled, | |
| const IndexRange &range); | |
| bool findRange(DrawElementsType type, | |
| size_t offset, | |
| size_t count, | |
| bool primitiveRestartEnabled, | |
| IndexRange *outRange) const; | |
| void invalidateRange(size_t offset, size_t size); | |
| void clear(); | |
| private: | |
| struct IndexRangeKey | |
| { | |
| IndexRangeKey(); | |
| IndexRangeKey(DrawElementsType type, size_t offset, size_t count, bool primitiveRestart); | |
| bool operator<(const IndexRangeKey &rhs) const; | |
| DrawElementsType type; | |
| size_t offset; | |
| size_t count; | |
| bool primitiveRestartEnabled; | |
| }; | |
| typedef std::map<IndexRangeKey, IndexRange> IndexRangeMap; | |
| IndexRangeMap mIndexRangeCache; | |
| }; | |
| } // namespace gl | |
| #endif // LIBANGLE_INDEXRANGECACHE_H_ |