1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2014 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci 9cb93a386Sopenharmony_ci#ifndef GrGLTextureRenderTarget_DEFINED 10cb93a386Sopenharmony_ci#define GrGLTextureRenderTarget_DEFINED 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_ci#include "src/gpu/gl/GrGLRenderTarget.h" 13cb93a386Sopenharmony_ci#include "src/gpu/gl/GrGLTexture.h" 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ciclass GrGLGpu; 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_ci#ifdef SK_BUILD_FOR_WIN 18cb93a386Sopenharmony_ci// Windows gives bogus warnings about inheriting asTexture/asRenderTarget via dominance. 19cb93a386Sopenharmony_ci#pragma warning(push) 20cb93a386Sopenharmony_ci#pragma warning(disable: 4250) 21cb93a386Sopenharmony_ci#endif 22cb93a386Sopenharmony_ci 23cb93a386Sopenharmony_ciclass GrGLTextureRenderTarget : public GrGLTexture, public GrGLRenderTarget { 24cb93a386Sopenharmony_cipublic: 25cb93a386Sopenharmony_ci // We're virtually derived from GrSurface (via both GrGLTexture and GrGLRenderTarget) so its 26cb93a386Sopenharmony_ci // constructor must be explicitly called. 27cb93a386Sopenharmony_ci GrGLTextureRenderTarget(GrGLGpu* gpu, 28cb93a386Sopenharmony_ci SkBudgeted budgeted, 29cb93a386Sopenharmony_ci int sampleCount, 30cb93a386Sopenharmony_ci const GrGLTexture::Desc& texDesc, 31cb93a386Sopenharmony_ci const GrGLRenderTarget::IDs&, 32cb93a386Sopenharmony_ci GrMipmapStatus); 33cb93a386Sopenharmony_ci 34cb93a386Sopenharmony_ci bool canAttemptStencilAttachment(bool useMultisampleFBO) const override; 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_ci void dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const override; 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_ci static sk_sp<GrGLTextureRenderTarget> MakeWrapped(GrGLGpu* gpu, 39cb93a386Sopenharmony_ci int sampleCount, 40cb93a386Sopenharmony_ci const GrGLTexture::Desc&, 41cb93a386Sopenharmony_ci sk_sp<GrGLTextureParameters>, 42cb93a386Sopenharmony_ci const GrGLRenderTarget::IDs&, 43cb93a386Sopenharmony_ci GrWrapCacheable, 44cb93a386Sopenharmony_ci GrMipmapStatus); 45cb93a386Sopenharmony_ci 46cb93a386Sopenharmony_ci GrBackendFormat backendFormat() const override { 47cb93a386Sopenharmony_ci // It doesn't matter if we take the texture or render target path, so just pick texture. 48cb93a386Sopenharmony_ci return GrGLTexture::backendFormat(); 49cb93a386Sopenharmony_ci } 50cb93a386Sopenharmony_ci 51cb93a386Sopenharmony_ciprotected: 52cb93a386Sopenharmony_ci void onAbandon() override { 53cb93a386Sopenharmony_ci GrGLRenderTarget::onAbandon(); 54cb93a386Sopenharmony_ci GrGLTexture::onAbandon(); 55cb93a386Sopenharmony_ci } 56cb93a386Sopenharmony_ci 57cb93a386Sopenharmony_ci void onRelease() override { 58cb93a386Sopenharmony_ci GrGLRenderTarget::onRelease(); 59cb93a386Sopenharmony_ci GrGLTexture::onRelease(); 60cb93a386Sopenharmony_ci } 61cb93a386Sopenharmony_ci 62cb93a386Sopenharmony_ciprivate: 63cb93a386Sopenharmony_ci // Constructor for instances wrapping backend objects. 64cb93a386Sopenharmony_ci GrGLTextureRenderTarget(GrGLGpu* gpu, 65cb93a386Sopenharmony_ci int sampleCount, 66cb93a386Sopenharmony_ci const GrGLTexture::Desc& texDesc, 67cb93a386Sopenharmony_ci sk_sp<GrGLTextureParameters> parameters, 68cb93a386Sopenharmony_ci const GrGLRenderTarget::IDs& ids, 69cb93a386Sopenharmony_ci GrWrapCacheable, 70cb93a386Sopenharmony_ci GrMipmapStatus); 71cb93a386Sopenharmony_ci 72cb93a386Sopenharmony_ci size_t onGpuMemorySize() const override; 73cb93a386Sopenharmony_ci}; 74cb93a386Sopenharmony_ci 75cb93a386Sopenharmony_ci#ifdef SK_BUILD_FOR_WIN 76cb93a386Sopenharmony_ci#pragma warning(pop) 77cb93a386Sopenharmony_ci#endif 78cb93a386Sopenharmony_ci 79cb93a386Sopenharmony_ci#endif 80