|
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 // IndexBuffer.h: Defines the abstract IndexBuffer class and IndexBufferInterface |
|
8 // class with derivations, classes that perform graphics API agnostic index buffer operations. |
|
9 |
|
10 #ifndef LIBGLESV2_RENDERER_INDEXBUFFER_H_ |
|
11 #define LIBGLESV2_RENDERER_INDEXBUFFER_H_ |
|
12 |
|
13 #include "common/angleutils.h" |
|
14 #include "libGLESv2/renderer/IndexRangeCache.h" |
|
15 |
|
16 namespace rx |
|
17 { |
|
18 class Renderer; |
|
19 |
|
20 class IndexBuffer |
|
21 { |
|
22 public: |
|
23 IndexBuffer(); |
|
24 virtual ~IndexBuffer(); |
|
25 |
|
26 virtual bool initialize(unsigned int bufferSize, GLenum indexType, bool dynamic) = 0; |
|
27 |
|
28 virtual bool mapBuffer(unsigned int offset, unsigned int size, void** outMappedMemory) = 0; |
|
29 virtual bool unmapBuffer() = 0; |
|
30 |
|
31 virtual bool discard() = 0; |
|
32 |
|
33 virtual GLenum getIndexType() const = 0; |
|
34 virtual unsigned int getBufferSize() const = 0; |
|
35 virtual bool setSize(unsigned int bufferSize, GLenum indexType) = 0; |
|
36 |
|
37 unsigned int getSerial() const; |
|
38 |
|
39 protected: |
|
40 void updateSerial(); |
|
41 |
|
42 private: |
|
43 DISALLOW_COPY_AND_ASSIGN(IndexBuffer); |
|
44 |
|
45 unsigned int mSerial; |
|
46 static unsigned int mNextSerial; |
|
47 }; |
|
48 |
|
49 class IndexBufferInterface |
|
50 { |
|
51 public: |
|
52 IndexBufferInterface(Renderer *renderer, bool dynamic); |
|
53 virtual ~IndexBufferInterface(); |
|
54 |
|
55 virtual bool reserveBufferSpace(unsigned int size, GLenum indexType) = 0; |
|
56 |
|
57 GLenum getIndexType() const; |
|
58 unsigned int getBufferSize() const; |
|
59 |
|
60 unsigned int getSerial() const; |
|
61 |
|
62 bool mapBuffer(unsigned int size, void** outMappedMemory, unsigned int *streamOffset); |
|
63 bool unmapBuffer(); |
|
64 |
|
65 IndexBuffer *getIndexBuffer() const; |
|
66 |
|
67 protected: |
|
68 unsigned int getWritePosition() const; |
|
69 void setWritePosition(unsigned int writePosition); |
|
70 |
|
71 bool discard(); |
|
72 |
|
73 bool setBufferSize(unsigned int bufferSize, GLenum indexType); |
|
74 |
|
75 private: |
|
76 DISALLOW_COPY_AND_ASSIGN(IndexBufferInterface); |
|
77 |
|
78 rx::Renderer *const mRenderer; |
|
79 |
|
80 IndexBuffer* mIndexBuffer; |
|
81 |
|
82 unsigned int mWritePosition; |
|
83 bool mDynamic; |
|
84 }; |
|
85 |
|
86 class StreamingIndexBufferInterface : public IndexBufferInterface |
|
87 { |
|
88 public: |
|
89 StreamingIndexBufferInterface(Renderer *renderer); |
|
90 ~StreamingIndexBufferInterface(); |
|
91 |
|
92 virtual bool reserveBufferSpace(unsigned int size, GLenum indexType); |
|
93 }; |
|
94 |
|
95 class StaticIndexBufferInterface : public IndexBufferInterface |
|
96 { |
|
97 public: |
|
98 explicit StaticIndexBufferInterface(Renderer *renderer); |
|
99 ~StaticIndexBufferInterface(); |
|
100 |
|
101 virtual bool reserveBufferSpace(unsigned int size, GLenum indexType); |
|
102 |
|
103 IndexRangeCache *getIndexRangeCache(); |
|
104 |
|
105 private: |
|
106 IndexRangeCache mIndexRangeCache; |
|
107 }; |
|
108 |
|
109 } |
|
110 |
|
111 #endif // LIBGLESV2_RENDERER_INDEXBUFFER_H_ |