diff options
Diffstat (limited to 'src/gpu/gl/GrGLVertexBuffer.cpp')
-rw-r--r-- | src/gpu/gl/GrGLVertexBuffer.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/gpu/gl/GrGLVertexBuffer.cpp b/src/gpu/gl/GrGLVertexBuffer.cpp new file mode 100644 index 0000000000..2294844fc4 --- /dev/null +++ b/src/gpu/gl/GrGLVertexBuffer.cpp @@ -0,0 +1,60 @@ +/* + * Copyright 2011 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "GrGLVertexBuffer.h" +#include "GrGLGpu.h" +#include "SkTraceMemoryDump.h" + +GrGLVertexBuffer::GrGLVertexBuffer(GrGLGpu* gpu, const Desc& desc) + : INHERITED(gpu, desc.fSizeInBytes, GrGLBufferImpl::kDynamicDraw_Usage == desc.fUsage, + 0 == desc.fID) + , fImpl(gpu, desc, GR_GL_ARRAY_BUFFER) { + this->registerWithCache(); +} + +void GrGLVertexBuffer::onRelease() { + if (!this->wasDestroyed()) { + fImpl.release(this->getGpuGL()); + } + + INHERITED::onRelease(); +} + +void GrGLVertexBuffer::onAbandon() { + fImpl.abandon(); + INHERITED::onAbandon(); +} + +void* GrGLVertexBuffer::onMap() { + if (!this->wasDestroyed()) { + return fImpl.map(this->getGpuGL()); + } else { + return nullptr; + } +} + +void GrGLVertexBuffer::onUnmap() { + if (!this->wasDestroyed()) { + fImpl.unmap(this->getGpuGL()); + } +} + +bool GrGLVertexBuffer::onUpdateData(const void* src, size_t srcSizeInBytes) { + if (!this->wasDestroyed()) { + return fImpl.updateData(this->getGpuGL(), src, srcSizeInBytes); + } else { + return false; + } +} + +void GrGLVertexBuffer::setMemoryBacking(SkTraceMemoryDump* traceMemoryDump, + const SkString& dumpName) const { + SkString buffer_id; + buffer_id.appendU32(this->bufferID()); + traceMemoryDump->setMemoryBacking(dumpName.c_str(), "gl_buffer", + buffer_id.c_str()); +} |