| // |
| // Copyright (c) 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 rx::IndexRangeCache class which stores information about |
| // ranges of indices. |
| |
| #ifndef LIBGLESV2_RENDERER_INDEXRANGECACHE_H_ |
| #define LIBGLESV2_RENDERER_INDEXRANGECACHE_H_ |
| |
| #include "common/angleutils.h" |
| #include <map> |
| |
| namespace rx |
| { |
| |
| class IndexRangeCache |
| { |
| public: |
| void addRange(GLenum type, unsigned int offset, GLsizei count, unsigned int minIdx, unsigned int maxIdx, |
| unsigned int streamOffset); |
| bool findRange(GLenum type, unsigned int offset, GLsizei count, unsigned int *outMinIndex, |
| unsigned int *outMaxIndex, unsigned int *outStreamOffset) const; |
| |
| void invalidateRange(unsigned int offset, unsigned int size); |
| void clear(); |
| |
| private: |
| struct IndexRange |
| { |
| GLenum type; |
| unsigned int offset; |
| GLsizei count; |
| |
| IndexRange(); |
| IndexRange(GLenum type, intptr_t offset, GLsizei count); |
| |
| bool operator<(const IndexRange& rhs) const; |
| }; |
| |
| struct IndexBounds |
| { |
| unsigned int minIndex; |
| unsigned int maxIndex; |
| unsigned int streamOffset; |
| |
| IndexBounds(); |
| IndexBounds(unsigned int minIdx, unsigned int maxIdx, unsigned int offset); |
| }; |
| |
| typedef std::map<IndexRange, IndexBounds> IndexRangeMap; |
| IndexRangeMap mIndexRangeCache; |
| }; |
| |
| } |
| |
| #endif LIBGLESV2_RENDERER_INDEXRANGECACHE_H |