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 // 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 void copyBufferSubData(Buffer* source, GLintptr sourceOffset, GLintptr destOffset, GLsizeiptr size); 39 GLvoid *mapRange(GLintptr offset, GLsizeiptr length, GLbitfield access); 40 void unmap(); 41 42 GLenum usage() const; 43 GLint accessFlags() const; 44 GLboolean mapped() const; 45 GLvoid *mapPointer() const; 46 GLint64 mapOffset() const; 47 GLint64 mapLength() const; 48 49 rx::BufferStorage *getStorage() const; 50 GLint64 size() const; 51 52 void markTransformFeedbackUsage(); 53 54 rx::StaticVertexBufferInterface *getStaticVertexBuffer(); 55 rx::StaticIndexBufferInterface *getStaticIndexBuffer(); 56 void invalidateStaticData(); 57 void promoteStaticUsage(int dataSize); 58 59 rx::IndexRangeCache *getIndexRangeCache(); 60 61 private: 62 DISALLOW_COPY_AND_ASSIGN(Buffer); 63 64 rx::Renderer *mRenderer; 65 GLenum mUsage; 66 GLint mAccessFlags; 67 GLboolean mMapped; 68 GLvoid *mMapPointer; 69 GLint64 mMapOffset; 70 GLint64 mMapLength; 71 72 rx::BufferStorage *mBufferStorage; 73 74 rx::IndexRangeCache mIndexRangeCache; 75 76 rx::StaticVertexBufferInterface *mStaticVertexBuffer; 77 rx::StaticIndexBufferInterface *mStaticIndexBuffer; 78 unsigned int mUnmodifiedDataUse; 79 }; 80 81 } 82 83 #endif // LIBGLESV2_BUFFER_H_ 84