diff options
author | 2011-03-30 21:26:44 +0000 | |
---|---|---|
committer | 2011-03-30 21:26:44 +0000 | |
commit | 8fe72477f204b1a45393e6a64caa84fd287b805b (patch) | |
tree | ee45cdc16a5e66a5a198920897d82db4284b97da /gpu/src/GrGLVertexBuffer.cpp | |
parent | a7d948523dce6044fc02db90726e5f971a93628b (diff) |
Add GrResource base class for ibs, texs, vbs, etc.
Add lostContext() to GrContext.
Review URL: http://codereview.appspot.com/4328044/
git-svn-id: http://skia.googlecode.com/svn/trunk@1026 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gpu/src/GrGLVertexBuffer.cpp')
-rw-r--r-- | gpu/src/GrGLVertexBuffer.cpp | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/gpu/src/GrGLVertexBuffer.cpp b/gpu/src/GrGLVertexBuffer.cpp index f96f90ea5f..3fa1425d02 100644 --- a/gpu/src/GrGLVertexBuffer.cpp +++ b/gpu/src/GrGLVertexBuffer.cpp @@ -18,42 +18,45 @@ #include "GrGLVertexBuffer.h" #include "GrGpuGL.h" -GrGLVertexBuffer::GrGLVertexBuffer(GrGLuint id, GrGpuGL* gl, size_t sizeInBytes, - bool dynamic) : - INHERITED(sizeInBytes, dynamic), - fGL(gl), - fBufferID(id), - fLockPtr(NULL) { +#define GPUGL static_cast<GrGpuGL*>(getGpu()) + +GrGLVertexBuffer::GrGLVertexBuffer(GrGpuGL* gpu, + GrGLuint id, + size_t sizeInBytes, + bool dynamic) + : INHERITED(gpu, sizeInBytes, dynamic) + , fBufferID(id) + , fLockPtr(NULL) { } -GrGLVertexBuffer::~GrGLVertexBuffer() { +void GrGLVertexBuffer::onRelease() { // make sure we've not been abandoned if (fBufferID) { - fGL->notifyVertexBufferDelete(this); + GPUGL->notifyVertexBufferDelete(this); GR_GL(DeleteBuffers(1, &fBufferID)); + fBufferID = 0; } } +void GrGLVertexBuffer::onAbandon() { + fBufferID = 0; + fLockPtr = NULL; +} + void GrGLVertexBuffer::bind() const { GR_GL(BindBuffer(GR_GL_ARRAY_BUFFER, fBufferID)); - fGL->notifyVertexBufferBind(this); + GPUGL->notifyVertexBufferBind(this); } GrGLuint GrGLVertexBuffer::bufferID() const { return fBufferID; } -void GrGLVertexBuffer::abandon() { - fBufferID = 0; - fGL = NULL; - fLockPtr = NULL; -} - void* GrGLVertexBuffer::lock() { GrAssert(fBufferID); GrAssert(!isLocked()); - if (fGL->supportsBufferLocking()) { - bind(); + if (GPUGL->supportsBufferLocking()) { + this->bind(); // Let driver know it can discard the old data GR_GL(BufferData(GR_GL_ARRAY_BUFFER, size(), NULL, dynamic() ? GR_GL_DYNAMIC_DRAW : GR_GL_STATIC_DRAW)); @@ -68,21 +71,22 @@ void* GrGLVertexBuffer::lockPtr() const { } void GrGLVertexBuffer::unlock() { + GrAssert(fBufferID); GrAssert(isLocked()); - GrAssert(fGL->supportsBufferLocking()); + GrAssert(GPUGL->supportsBufferLocking()); - bind(); + this->bind(); GR_GL(UnmapBuffer(GR_GL_ARRAY_BUFFER)); fLockPtr = NULL; } bool GrGLVertexBuffer::isLocked() const { - GrAssert(fBufferID); + GrAssert(!this->isValid() || fBufferID); #if GR_DEBUG - if (fGL->supportsBufferLocking()) { + if (this->isValid() && GPUGL->supportsBufferLocking()) { GrGLint mapped; - bind(); + this->bind(); GR_GL(GetBufferParameteriv(GR_GL_ARRAY_BUFFER, GR_GL_BUFFER_MAPPED, &mapped)); GrAssert(!!mapped == !!fLockPtr); } @@ -96,7 +100,7 @@ bool GrGLVertexBuffer::updateData(const void* src, size_t srcSizeInBytes) { if (srcSizeInBytes > size()) { return false; } - bind(); + this->bind(); GrGLenum usage = dynamic() ? GR_GL_DYNAMIC_DRAW : GR_GL_STATIC_DRAW; if (size() == srcSizeInBytes) { GR_GL(BufferData(GR_GL_ARRAY_BUFFER, srcSizeInBytes, src, usage)); @@ -115,7 +119,7 @@ bool GrGLVertexBuffer::updateSubData(const void* src, if (srcSizeInBytes + offset > size()) { return false; } - bind(); + this->bind(); GR_GL(BufferSubData(GR_GL_ARRAY_BUFFER, offset, srcSizeInBytes, src)); return true; } |