Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / angle / src / libGLESv2 / renderer / d3d / IndexDataManager.h
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
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 BufferD3D;
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     BufferD3D *storage;
42     GLenum indexType;
43     unsigned int serial;
44 };
45
46 class IndexDataManager
47 {
48   public:
49     explicit IndexDataManager(Renderer *renderer);
50     virtual ~IndexDataManager();
51
52     GLenum prepareIndexData(GLenum type, GLsizei count, gl::Buffer *arrayElementBuffer, const GLvoid *indices, TranslatedIndexData *translated);
53     StaticIndexBufferInterface *getCountingIndices(GLsizei count);
54
55   private:
56     DISALLOW_COPY_AND_ASSIGN(IndexDataManager);
57
58     Renderer *const mRenderer;
59
60     StreamingIndexBufferInterface *mStreamingBufferShort;
61     StreamingIndexBufferInterface *mStreamingBufferInt;
62     StaticIndexBufferInterface *mCountingBuffer;
63 };
64
65 }
66
67 #endif   // LIBGLESV2_INDEXDATAMANAGER_H_