Home | History | Annotate | Download | only in debug
      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 {
     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     }
     28     ~GrBufferObj() override {
     29         delete[] fDataPtr;
     30     }
     31 
     32     void access() {
     33         // cannot access the buffer if it is currently mapped
     34         GrAlwaysAssert(!fMapped);
     35     }
     36 
     37     void setMapped(GrGLintptr offset, GrGLsizeiptr length) {
     38         fMapped = true;
     39         fMappedOffset = offset;
     40         fMappedLength = length;
     41     }
     42     void resetMapped()           { fMapped = false; }
     43     bool getMapped() const       { return fMapped; }
     44     GrGLintptr getMappedOffset() const { return fMappedOffset; }
     45     GrGLsizeiptr getMappedLength() const { return fMappedLength; }
     46 
     47     void setBound()              { fBound = true; }
     48     void resetBound()            { fBound = false; }
     49     bool getBound() const        { return fBound; }
     50 
     51     void allocate(GrGLsizeiptr size, const GrGLchar *dataPtr);
     52     GrGLsizeiptr getSize() const { return fSize; }
     53     GrGLchar *getDataPtr()       { return fDataPtr; }
     54 
     55     void setUsage(GrGLint usage) { fUsage = usage; }
     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