1 // 2 // Copyright (c) 2002-2012 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 // IndexDataManager.h: Defines the IndexDataManager, a class that 8 // runs the Buffer translation process for index buffers. 9 10 #ifndef LIBGLESV2_INDEXDATAMANAGER_H_ 11 #define LIBGLESV2_INDEXDATAMANAGER_H_ 12 13 #include "common/angleutils.h" 14 15 namespace 16 { 17 enum { INITIAL_INDEX_BUFFER_SIZE = 4096 * sizeof(GLuint) }; 18 } 19 20 namespace gl 21 { 22 class Buffer; 23 } 24 25 namespace rx 26 { 27 class StaticIndexBufferInterface; 28 class StreamingIndexBufferInterface; 29 class IndexBuffer; 30 class BufferStorage; 31 class Renderer; 32 33 struct TranslatedIndexData 34 { 35 unsigned int minIndex; 36 unsigned int maxIndex; 37 unsigned int startIndex; 38 unsigned int startOffset; // In bytes 39 40 IndexBuffer *indexBuffer; 41 BufferStorage *storage; 42 unsigned int serial; 43 }; 44 45 class IndexDataManager 46 { 47 public: 48 explicit IndexDataManager(Renderer *renderer); 49 virtual ~IndexDataManager(); 50 51 GLenum prepareIndexData(GLenum type, GLsizei count, gl::Buffer *arrayElementBuffer, const GLvoid *indices, TranslatedIndexData *translated); 52 StaticIndexBufferInterface *getCountingIndices(GLsizei count); 53 54 private: 55 DISALLOW_COPY_AND_ASSIGN(IndexDataManager); 56 57 Renderer *const mRenderer; 58 59 StreamingIndexBufferInterface *mStreamingBufferShort; 60 StreamingIndexBufferInterface *mStreamingBufferInt; 61 StaticIndexBufferInterface *mCountingBuffer; 62 }; 63 64 } 65 66 #endif // LIBGLESV2_INDEXDATAMANAGER_H_ 67