1 /* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 9 #ifndef GrGLTextureRenderTarget_DEFINED 10 #define GrGLTextureRenderTarget_DEFINED 11 12 #include "GrGLGpu.h" 13 #include "GrGLTexture.h" 14 #include "GrGLRenderTarget.h" 15 16 class GrGLGpu; 17 18 #ifdef SK_BUILD_FOR_WIN 19 // Windows gives bogus warnings about inheriting asTexture/asRenderTarget via dominance. 20 #pragma warning(push) 21 #pragma warning(disable: 4250) 22 #endif 23 24 class GrGLTextureRenderTarget : public GrGLTexture, public GrGLRenderTarget { 25 public: 26 // We're virtually derived from GrSurface (via both GrGLTexture and GrGLRenderTarget) so its 27 // constructor must be explicitly called. GrGLTextureRenderTarget(GrGLGpu * gpu,const GrSurfaceDesc & desc,const GrGLTexture::IDDesc & texIDDesc,const GrGLRenderTarget::IDDesc & rtIDDesc)28 GrGLTextureRenderTarget(GrGLGpu* gpu, 29 const GrSurfaceDesc& desc, 30 const GrGLTexture::IDDesc& texIDDesc, 31 const GrGLRenderTarget::IDDesc& rtIDDesc) 32 : GrSurface(gpu, texIDDesc.fLifeCycle, desc) 33 , GrGLTexture(gpu, desc, texIDDesc, GrGLTexture::kDerived) 34 , GrGLRenderTarget(gpu, desc, rtIDDesc, GrGLRenderTarget::kDerived) { 35 this->registerWithCache(); 36 } 37 38 void dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const override; 39 40 protected: onAbandon()41 void onAbandon() override { 42 GrGLRenderTarget::onAbandon(); 43 GrGLTexture::onAbandon(); 44 } 45 onRelease()46 void onRelease() override { 47 GrGLRenderTarget::onRelease(); 48 GrGLTexture::onRelease(); 49 } 50 51 private: 52 // GrGLRenderTarget accounts for the texture's memory and any MSAA renderbuffer's memory. onGpuMemorySize()53 size_t onGpuMemorySize() const override { 54 return GrGLRenderTarget::onGpuMemorySize(); 55 } 56 57 }; 58 59 #ifdef SK_BUILD_FOR_WIN 60 #pragma warning(pop) 61 #endif 62 63 #endif 64