| |
| /* |
| * 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 "gl/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) { |
| } |
| ~GrBufferObj() override { |
| 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 |