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 15namespace 16{ 17 enum { INITIAL_INDEX_BUFFER_SIZE = 4096 * sizeof(GLuint) }; 18} 19 20namespace gl 21{ 22class Buffer; 23} 24 25namespace rx 26{ 27class StaticIndexBufferInterface; 28class StreamingIndexBufferInterface; 29class IndexBuffer; 30class BufferStorage; 31class Renderer; 32 33struct 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 45class 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