1// 2// Copyright (c) 2002-2014 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#include "common/mathutil.h" 15#include "libGLESv2/Error.h" 16 17#include <GLES2/gl2.h> 18 19namespace 20{ 21 enum { INITIAL_INDEX_BUFFER_SIZE = 4096 * sizeof(GLuint) }; 22} 23 24namespace gl 25{ 26class Buffer; 27} 28 29namespace rx 30{ 31class IndexBufferInterface; 32class StaticIndexBufferInterface; 33class StreamingIndexBufferInterface; 34class IndexBuffer; 35class BufferD3D; 36class Renderer; 37 38struct TranslatedIndexData 39{ 40 RangeUI indexRange; 41 unsigned int startIndex; 42 unsigned int startOffset; // In bytes 43 44 IndexBuffer *indexBuffer; 45 BufferD3D *storage; 46 GLenum indexType; 47 unsigned int serial; 48}; 49 50class IndexDataManager 51{ 52 public: 53 explicit IndexDataManager(Renderer *renderer); 54 virtual ~IndexDataManager(); 55 56 gl::Error prepareIndexData(GLenum type, GLsizei count, gl::Buffer *arrayElementBuffer, const GLvoid *indices, TranslatedIndexData *translated); 57 58 private: 59 gl::Error getStreamingIndexBuffer(GLenum destinationIndexType, IndexBufferInterface **outBuffer); 60 61 DISALLOW_COPY_AND_ASSIGN(IndexDataManager); 62 63 Renderer *const mRenderer; 64 65 StreamingIndexBufferInterface *mStreamingBufferShort; 66 StreamingIndexBufferInterface *mStreamingBufferInt; 67}; 68 69} 70 71#endif // LIBGLESV2_INDEXDATAMANAGER_H_ 72