| /* | |
| * Copyright 2012 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef GrBufferObj_DEFINED | |
| #define GrBufferObj_DEFINED | |
| #include "GrFakeRefObj.h" | |
| #include "../GrGLDefines.h" | |
| //////////////////////////////////////////////////////////////////////////////// | |
| class GrBufferObj : public GrFakeRefObj { | |
| GR_DEFINE_CREATOR(GrBufferObj); | |
| public: | |
| GrBufferObj() | |
| : GrFakeRefObj() | |
| , fDataPtr(nullptr) | |
| , fMapped(false) | |
| , fBound(false) | |
| , fSize(0) | |
| , fUsage(GR_GL_STATIC_DRAW) { | |
| } | |
| virtual ~GrBufferObj() { | |
| delete[] fDataPtr; | |
| } | |
| void access() { | |
| // cannot access the buffer if it is currently mapped | |
| GrAlwaysAssert(!fMapped); | |
| } | |
| void setMapped(GrGLintptr offset, GrGLsizeiptr length) { | |
| fMapped = true; | |
| fMappedOffset = offset; | |
| fMappedLength = length; | |
| } | |
| void resetMapped() { fMapped = false; } | |
| bool getMapped() const { return fMapped; } | |
| GrGLintptr getMappedOffset() const { return fMappedOffset; } | |
| GrGLsizeiptr getMappedLength() const { return fMappedLength; } | |
| void setBound() { fBound = true; } | |
| void resetBound() { fBound = false; } | |
| bool getBound() const { return fBound; } | |
| void allocate(GrGLsizeiptr size, const GrGLchar *dataPtr); | |
| GrGLsizeiptr getSize() const { return fSize; } | |
| GrGLchar *getDataPtr() { return fDataPtr; } | |
| void setUsage(GrGLint usage) { fUsage = usage; } | |
| GrGLint getUsage() const { return fUsage; } | |
| void deleteAction() override; | |
| protected: | |
| private: | |
| GrGLchar* fDataPtr; | |
| bool fMapped; // is the buffer object mapped via "glMapBuffer[Range]"? | |
| GrGLintptr fMappedOffset; // the offset of the buffer range that is mapped | |
| GrGLsizeiptr fMappedLength; // the size of the buffer range that is mapped | |
| bool fBound; // is the buffer object bound via "glBindBuffer"? | |
| GrGLsizeiptr fSize; // size in bytes | |
| GrGLint fUsage; // one of: GL_STREAM_DRAW, | |
| // GL_STATIC_DRAW, | |
| // GL_DYNAMIC_DRAW | |
| typedef GrFakeRefObj INHERITED; | |
| }; | |
| #endif // GrBufferObj_DEFINED |