diff options
author | 2014-11-03 08:47:23 -0800 | |
---|---|---|
committer | 2014-11-03 08:47:23 -0800 | |
commit | 37dd331b20a92ce79cc26556e065dec98a66cb0b (patch) | |
tree | cac1c6927c1f8f9860890e37b9d08cca01de251b /include/gpu/GrGpuResourceRef.h | |
parent | 89a9ecef9ead1f6093e796173b28b82dca4adcbd (diff) |
Add class GrGLTextureRenderTarget for GL texture/rendertarget objects
BUG=skia:2889
Review URL: https://codereview.chromium.org/695813003
Diffstat (limited to 'include/gpu/GrGpuResourceRef.h')
-rw-r--r-- | include/gpu/GrGpuResourceRef.h | 47 |
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. |