1 2 /* 3 * Copyright 2012 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 #ifndef GrBufferObj_DEFINED 10 #define GrBufferObj_DEFINED 11 12 #include "GrFakeRefObj.h" 13 #include "gl/GrGLDefines.h" 14 15 //////////////////////////////////////////////////////////////////////////////// 16 class GrBufferObj : public GrFakeRefObj { GR_DEFINE_CREATOR(GrBufferObj)17 GR_DEFINE_CREATOR(GrBufferObj) 18 19 public: 20 GrBufferObj() 21 : GrFakeRefObj() 22 , fDataPtr(nullptr) 23 , fMapped(false) 24 , fBound(false) 25 , fSize(0) 26 , fUsage(GR_GL_STATIC_DRAW) { 27 } ~GrBufferObj()28 ~GrBufferObj() override { 29 delete[] fDataPtr; 30 } 31 access()32 void access() { 33 // cannot access the buffer if it is currently mapped 34 GrAlwaysAssert(!fMapped); 35 } 36 setMapped(GrGLintptr offset,GrGLsizeiptr length)37 void setMapped(GrGLintptr offset, GrGLsizeiptr length) { 38 fMapped = true; 39 fMappedOffset = offset; 40 fMappedLength = length; 41 } resetMapped()42 void resetMapped() { fMapped = false; } getMapped()43 bool getMapped() const { return fMapped; } getMappedOffset()44 GrGLintptr getMappedOffset() const { return fMappedOffset; } getMappedLength()45 GrGLsizeiptr getMappedLength() const { return fMappedLength; } 46 setBound()47 void setBound() { fBound = true; } resetBound()48 void resetBound() { fBound = false; } getBound()49 bool getBound() const { return fBound; } 50 51 void allocate(GrGLsizeiptr size, const GrGLchar *dataPtr); getSize()52 GrGLsizeiptr getSize() const { return fSize; } getDataPtr()53 GrGLchar *getDataPtr() { return fDataPtr; } 54 setUsage(GrGLint usage)55 void setUsage(GrGLint usage) { fUsage = usage; } getUsage()56 GrGLint getUsage() const { return fUsage; } 57 58 void deleteAction() override; 59 60 protected: 61 private: 62 63 GrGLchar* fDataPtr; 64 bool fMapped; // is the buffer object mapped via "glMapBuffer[Range]"? 65 GrGLintptr fMappedOffset; // the offset of the buffer range that is mapped 66 GrGLsizeiptr fMappedLength; // the size of the buffer range that is mapped 67 bool fBound; // is the buffer object bound via "glBindBuffer"? 68 GrGLsizeiptr fSize; // size in bytes 69 GrGLint fUsage; // one of: GL_STREAM_DRAW, 70 // GL_STATIC_DRAW, 71 // GL_DYNAMIC_DRAW 72 73 typedef GrFakeRefObj INHERITED; 74 }; 75 76 #endif // GrBufferObj_DEFINED 77