aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/gpu/GrGpuResourceRef.h
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2014-11-03 08:47:23 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2014-11-03 08:47:23 -0800
commit37dd331b20a92ce79cc26556e065dec98a66cb0b (patch)
treecac1c6927c1f8f9860890e37b9d08cca01de251b /include/gpu/GrGpuResourceRef.h
parent89a9ecef9ead1f6093e796173b28b82dca4adcbd (diff)
Add class GrGLTextureRenderTarget for GL texture/rendertarget objects
Diffstat (limited to 'include/gpu/GrGpuResourceRef.h')
-rw-r--r--include/gpu/GrGpuResourceRef.h47
1 files changed, 46 insertions, 1 deletions
diff --git a/include/gpu/GrGpuResourceRef.h b/include/gpu/GrGpuResourceRef.h
index 0223f18977..93298f0656 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.