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