Index: include/gpu/GrGpuResourceRef.h |
diff --git a/include/gpu/GrGpuResourceRef.h b/include/gpu/GrGpuResourceRef.h |
index 0223f18977e1d99acf8fc38fd84b52a58842221a..93298f0656f4e5e03529c27e04e59233c0dba1bc 100644 |
--- a/include/gpu/GrGpuResourceRef.h |
+++ b/include/gpu/GrGpuResourceRef.h |
@@ -9,6 +9,8 @@ |
#define GrGpuResourceRef_DEFINED |
#include "GrGpuResource.h" |
+#include "GrRenderTarget.h" |
+#include "GrTexture.h" |
#include "SkRefCnt.h" |
/** |
@@ -96,7 +98,7 @@ public: |
/** Adopts a ref from the caller. ioType expresses what type of IO operations will be marked as |
pending on the resource when markPendingIO is called. */ |
- GrTGpuResourceRef(T* resource, GrIOType ioType) : INHERITED(resource, ioType) {} |
+ GrTGpuResourceRef(T* resource, GrIOType ioType) : INHERITED(resource, ioType) { } |
T* get() const { return static_cast<T*>(this->getResource()); } |
@@ -108,6 +110,49 @@ private: |
typedef GrGpuResourceRef INHERITED; |
}; |
+// Specializations for GrTexture and GrRenderTarget because they use virtual inheritance. |
+template<> class GrTGpuResourceRef<GrTexture> : public GrGpuResourceRef { |
+public: |
+ GrTGpuResourceRef() {} |
+ |
+ GrTGpuResourceRef(GrTexture* texture, GrIOType ioType) : INHERITED(texture, ioType) { } |
+ |
+ GrTexture* get() const { |
+ GrSurface* surface = static_cast<GrSurface*>(this->getResource()); |
+ if (surface) { |
+ return surface->asTexture(); |
+ } else { |
+ return NULL; |
+ } |
+ } |
+ |
+ void set(GrTexture* texture, GrIOType ioType) { this->setResource(texture, ioType); } |
+ |
+private: |
+ typedef GrGpuResourceRef INHERITED; |
+}; |
+ |
+template<> class GrTGpuResourceRef<GrRenderTarget> : public GrGpuResourceRef { |
+public: |
+ GrTGpuResourceRef() {} |
+ |
+ GrTGpuResourceRef(GrRenderTarget* rt, GrIOType ioType) : INHERITED(rt, ioType) { } |
+ |
+ GrRenderTarget* get() const { |
+ GrSurface* surface = static_cast<GrSurface*>(this->getResource()); |
+ if (surface) { |
+ return surface->asRenderTarget(); |
+ } else { |
+ return NULL; |
+ } |
+ } |
+ |
+ void set(GrRenderTarget* rt, GrIOType ioType) { this->setResource(rt, ioType); } |
+ |
+private: |
+ typedef GrGpuResourceRef INHERITED; |
+}; |
+ |
/** |
* This is similar to GrTGpuResourceRef but can only be in the pending IO state. It never owns a |
* ref. |