Index: src/gpu/GrGpu.cpp |
diff --git a/src/gpu/GrGpu.cpp b/src/gpu/GrGpu.cpp |
index bdf67727c3f41f70eb515492e01fbb5e7ac23bbb..0b49e7445ab897b8709406ec988bf1d6d5067043 100644 |
--- a/src/gpu/GrGpu.cpp |
+++ b/src/gpu/GrGpu.cpp |
@@ -49,9 +49,62 @@ |
#endif |
} |
-GrGpu::~GrGpu() {} |
- |
-void GrGpu::contextAbandonded() {} |
+GrGpu::~GrGpu() { |
+ this->releaseResources(); |
+} |
+ |
+void GrGpu::abandonResources() { |
+ |
+ fClipMaskManager.releaseResources(); |
+ |
+ while (NULL != fObjectList.head()) { |
+ fObjectList.head()->abandon(); |
+ } |
+ |
+ SkASSERT(NULL == fQuadIndexBuffer || fQuadIndexBuffer->wasDestroyed()); |
+ SkSafeSetNull(fQuadIndexBuffer); |
+ delete fVertexPool; |
+ fVertexPool = NULL; |
+ delete fIndexPool; |
+ fIndexPool = NULL; |
+} |
+ |
+void GrGpu::releaseResources() { |
+ |
+ fClipMaskManager.releaseResources(); |
+ |
+ while (NULL != fObjectList.head()) { |
+ fObjectList.head()->release(); |
+ } |
+ |
+ SkASSERT(NULL == fQuadIndexBuffer || fQuadIndexBuffer->wasDestroyed()); |
+ SkSafeSetNull(fQuadIndexBuffer); |
+ delete fVertexPool; |
+ fVertexPool = NULL; |
+ delete fIndexPool; |
+ fIndexPool = NULL; |
+} |
+ |
+void GrGpu::insertObject(GrGpuResource* object) { |
+ SkASSERT(NULL != object); |
+ SkASSERT(this == object->getGpu()); |
+ |
+ fObjectList.addToHead(object); |
+} |
+ |
+void GrGpu::removeObject(GrGpuResource* object) { |
+ SkASSERT(NULL != object); |
+ SkASSERT(this == object->getGpu()); |
+ |
+ fObjectList.remove(object); |
+} |
+ |
+ |
+void GrGpu::unimpl(const char msg[]) { |
+#ifdef SK_DEBUG |
+ GrPrintf("--- GrGpu unimplemented(\"%s\")\n", msg); |
+#endif |
+} |
//////////////////////////////////////////////////////////////////////////////// |
@@ -266,8 +319,7 @@ |
} |
const GrIndexBuffer* GrGpu::getQuadIndexBuffer() const { |
- if (NULL == fQuadIndexBuffer || fQuadIndexBuffer->wasDestroyed()) { |
- SkSafeUnref(fQuadIndexBuffer); |
+ if (NULL == fQuadIndexBuffer) { |
static const int SIZE = sizeof(uint16_t) * 6 * MAX_QUADS; |
GrGpu* me = const_cast<GrGpu*>(this); |
fQuadIndexBuffer = me->createIndexBuffer(SIZE, false); |