gfx/angle/src/libGLESv2/renderer/VertexBuffer.h

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:ec177f988e9b
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 // VertexBuffer.h: Defines the abstract VertexBuffer class and VertexBufferInterface
8 // class with derivations, classes that perform graphics API agnostic vertex buffer operations.
9
10 #ifndef LIBGLESV2_RENDERER_VERTEXBUFFER_H_
11 #define LIBGLESV2_RENDERER_VERTEXBUFFER_H_
12
13 #include "common/angleutils.h"
14
15 namespace gl
16 {
17 class VertexAttribute;
18 }
19
20 namespace rx
21 {
22 class Renderer;
23
24 class VertexBuffer
25 {
26 public:
27 VertexBuffer();
28 virtual ~VertexBuffer();
29
30 virtual bool initialize(unsigned int size, bool dynamicUsage) = 0;
31
32 virtual bool storeVertexAttributes(const gl::VertexAttribute &attrib, GLint start, GLsizei count,
33 GLsizei instances, unsigned int offset) = 0;
34 virtual bool storeRawData(const void* data, unsigned int size, unsigned int offset) = 0;
35
36 virtual bool getSpaceRequired(const gl::VertexAttribute &attrib, GLsizei count, GLsizei instances,
37 unsigned int *outSpaceRequired) const = 0;
38
39 virtual bool requiresConversion(const gl::VertexAttribute &attrib) const = 0;
40
41 virtual unsigned int getBufferSize() const = 0;
42 virtual bool setBufferSize(unsigned int size) = 0;
43 virtual bool discard() = 0;
44
45 unsigned int getSerial() const;
46
47 protected:
48 void updateSerial();
49
50 private:
51 DISALLOW_COPY_AND_ASSIGN(VertexBuffer);
52
53 unsigned int mSerial;
54 static unsigned int mNextSerial;
55 };
56
57 class VertexBufferInterface
58 {
59 public:
60 VertexBufferInterface(rx::Renderer *renderer, bool dynamic);
61 virtual ~VertexBufferInterface();
62
63 bool reserveVertexSpace(const gl::VertexAttribute &attribute, GLsizei count, GLsizei instances);
64 bool reserveRawDataSpace(unsigned int size);
65
66 unsigned int getBufferSize() const;
67
68 unsigned int getSerial() const;
69
70 virtual bool storeVertexAttributes(const gl::VertexAttribute &attrib, GLint start, GLsizei count, GLsizei instances,
71 unsigned int *outStreamOffset);
72 virtual bool storeRawData(const void* data, unsigned int size, unsigned int *outStreamOffset);
73
74 VertexBuffer* getVertexBuffer() const;
75
76 protected:
77 virtual bool reserveSpace(unsigned int size) = 0;
78
79 unsigned int getWritePosition() const;
80 void setWritePosition(unsigned int writePosition);
81
82 bool discard();
83
84 bool setBufferSize(unsigned int size);
85
86 private:
87 DISALLOW_COPY_AND_ASSIGN(VertexBufferInterface);
88
89 rx::Renderer *const mRenderer;
90
91 VertexBuffer* mVertexBuffer;
92
93 unsigned int mWritePosition;
94 unsigned int mReservedSpace;
95 bool mDynamic;
96 };
97
98 class StreamingVertexBufferInterface : public VertexBufferInterface
99 {
100 public:
101 StreamingVertexBufferInterface(rx::Renderer *renderer, std::size_t initialSize);
102 ~StreamingVertexBufferInterface();
103
104 protected:
105 bool reserveSpace(unsigned int size);
106 };
107
108 class StaticVertexBufferInterface : public VertexBufferInterface
109 {
110 public:
111 explicit StaticVertexBufferInterface(rx::Renderer *renderer);
112 ~StaticVertexBufferInterface();
113
114 bool storeVertexAttributes(const gl::VertexAttribute &attrib, GLint start, GLsizei count, GLsizei instances,
115 unsigned int *outStreamOffset);
116
117 bool lookupAttribute(const gl::VertexAttribute &attribute, unsigned int* outStreamOffset);
118
119 protected:
120 bool reserveSpace(unsigned int size);
121
122 private:
123 struct VertexElement
124 {
125 GLenum type;
126 GLint size;
127 GLsizei stride;
128 bool normalized;
129 int attributeOffset;
130
131 unsigned int streamOffset;
132 };
133
134 std::vector<VertexElement> mCache;
135 };
136
137 }
138
139 #endif // LIBGLESV2_RENDERER_VERTEXBUFFER_H_

mercurial