diff options
Diffstat (limited to 'src/gpu/gl/GrGLBuffer.h')
-rw-r--r-- | src/gpu/gl/GrGLBuffer.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/gpu/gl/GrGLBuffer.h b/src/gpu/gl/GrGLBuffer.h new file mode 100644 index 0000000000..90d2c43dfa --- /dev/null +++ b/src/gpu/gl/GrGLBuffer.h @@ -0,0 +1,61 @@ +/* + * Copyright 2016 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrGLBuffer_DEFINED +#define GrGLBuffer_DEFINED + +#include "GrBuffer.h" +#include "gl/GrGLTypes.h" + +class GrGLGpu; +class GrGLCaps; + +class GrGLBuffer : public GrBuffer { +public: + static GrGLBuffer* Create(GrGLGpu*, GrBufferType, size_t size, GrAccessPattern); + + ~GrGLBuffer() { + // either release or abandon should have been called by the owner of this object. + SkASSERT(0 == fBufferID); + } + + GrGLenum target() const { return fTarget; } + GrGLuint bufferID() const { return fBufferID; } + size_t baseOffset() const { return reinterpret_cast<size_t>(fCPUData); } + +protected: + GrGLBuffer(GrGLGpu*, GrBufferType, size_t size, GrAccessPattern, bool cpuBacked); + + void onAbandon() override; + void onRelease() override; + void setMemoryBacking(SkTraceMemoryDump* traceMemoryDump, + const SkString& dumpName) const override; + +private: + GrGLGpu* glGpu() const; + const GrGLCaps& glCaps() const; + + void onMap() override; + void onUnmap() override; + bool onUpdateData(const void* src, size_t srcSizeInBytes) override; + +#ifdef SK_DEBUG + void validate() const; +#endif + + void* fCPUData; + GrGLenum fTarget; // GL_ARRAY_BUFFER or GL_ELEMENT_ARRAY_BUFFER, e.g. + GrGLuint fBufferID; + size_t fSizeInBytes; + GrGLenum fUsage; + size_t fGLSizeInBytes; // In certain cases we make the size of the GL buffer object + // smaller or larger than the size in fDesc. + + typedef GrBuffer INHERITED; +}; + +#endif |