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 "../GrGLDefines.h"
14 
15 ////////////////////////////////////////////////////////////////////////////////
16 class GrBufferObj : public GrFakeRefObj {
17     GR_DEFINE_CREATOR(GrBufferObj);
18 
19 public:
GrBufferObj()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     virtual ~GrBufferObj() {
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