|
1 // |
|
2 // Copyright (c) 2002-2013 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 // Buffer.h: Defines the gl::Buffer class, representing storage of vertex and/or |
|
8 // index data. Implements GL buffer objects and related functionality. |
|
9 // [OpenGL ES 2.0.24] section 2.9 page 21. |
|
10 |
|
11 #ifndef LIBGLESV2_BUFFER_H_ |
|
12 #define LIBGLESV2_BUFFER_H_ |
|
13 |
|
14 #include "common/angleutils.h" |
|
15 #include "common/RefCountObject.h" |
|
16 #include "libGLESv2/renderer/IndexRangeCache.h" |
|
17 |
|
18 namespace rx |
|
19 { |
|
20 class Renderer; |
|
21 class BufferStorage; |
|
22 class StaticIndexBufferInterface; |
|
23 class StaticVertexBufferInterface; |
|
24 }; |
|
25 |
|
26 namespace gl |
|
27 { |
|
28 |
|
29 class Buffer : public RefCountObject |
|
30 { |
|
31 public: |
|
32 Buffer(rx::Renderer *renderer, GLuint id); |
|
33 |
|
34 virtual ~Buffer(); |
|
35 |
|
36 void bufferData(const void *data, GLsizeiptr size, GLenum usage); |
|
37 void bufferSubData(const void *data, GLsizeiptr size, GLintptr offset); |
|
38 |
|
39 GLenum usage() const; |
|
40 |
|
41 rx::BufferStorage *getStorage() const; |
|
42 unsigned int size(); |
|
43 |
|
44 rx::StaticVertexBufferInterface *getStaticVertexBuffer(); |
|
45 rx::StaticIndexBufferInterface *getStaticIndexBuffer(); |
|
46 void invalidateStaticData(); |
|
47 void promoteStaticUsage(int dataSize); |
|
48 |
|
49 rx::IndexRangeCache *getIndexRangeCache(); |
|
50 |
|
51 private: |
|
52 DISALLOW_COPY_AND_ASSIGN(Buffer); |
|
53 |
|
54 rx::Renderer *mRenderer; |
|
55 GLenum mUsage; |
|
56 |
|
57 rx::BufferStorage *mBufferStorage; |
|
58 |
|
59 rx::IndexRangeCache mIndexRangeCache; |
|
60 |
|
61 rx::StaticVertexBufferInterface *mStaticVertexBuffer; |
|
62 rx::StaticIndexBufferInterface *mStaticIndexBuffer; |
|
63 unsigned int mUnmodifiedDataUse; |
|
64 }; |
|
65 |
|
66 } |
|
67 |
|
68 #endif // LIBGLESV2_BUFFER_H_ |