aboutsummaryrefslogtreecommitdiffhomepage
path: root/gpu/src/GrGLVertexBuffer.cpp
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-03-30 21:26:44 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-03-30 21:26:44 +0000
commit8fe72477f204b1a45393e6a64caa84fd287b805b (patch)
treeee45cdc16a5e66a5a198920897d82db4284b97da /gpu/src/GrGLVertexBuffer.cpp
parenta7d948523dce6044fc02db90726e5f971a93628b (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.cpp52
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;
}