1 /*
2  * Copyright 2011 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 GrGLTexture_DEFINED
10 #define GrGLTexture_DEFINED
11 
12 #include "include/private/GrGLTypesPriv.h"
13 #include "src/gpu/GrGpu.h"
14 #include "src/gpu/GrTexture.h"
15 #include "src/gpu/gl/GrGLUtil.h"
16 
17 class GrGLGpu;
18 
19 class GrGLTexture : public GrTexture {
20 public:
21     struct Desc {
22         SkISize fSize                       = {-1, -1};
23         GrGLenum fTarget                    = 0;
24         GrGLuint fID                        = 0;
25         GrGLFormat fFormat                  = GrGLFormat::kUnknown;
26         GrBackendObjectOwnership fOwnership = GrBackendObjectOwnership::kOwned;
27     };
28 
29     static GrTextureType TextureTypeFromTarget(GrGLenum textureTarget);
30 
31     GrGLTexture(GrGLGpu*, SkBudgeted, const Desc&, GrMipmapStatus);
32 
~GrGLTexture()33     ~GrGLTexture() override {}
34 
35     GrBackendTexture getBackendTexture() const override;
36 
37     GrBackendFormat backendFormat() const override;
38 
39     // TODO: Remove once clients are no longer calling this.
textureParamsModified()40     void textureParamsModified() override { fParameters->invalidate(); }
41 
parameters()42     GrGLTextureParameters* parameters() { return fParameters.get(); }
43 
textureID()44     GrGLuint textureID() const { return fID; }
45 
46     GrGLenum target() const;
47 
format()48     GrGLFormat format() const { return fFormat; }
49 
hasBaseLevelBeenBoundToFBO()50     bool hasBaseLevelBeenBoundToFBO() const { return fBaseLevelHasBeenBoundToFBO; }
baseLevelWasBoundToFBO()51     void baseLevelWasBoundToFBO() { fBaseLevelHasBeenBoundToFBO = true; }
52 
53     static sk_sp<GrGLTexture> MakeWrapped(GrGLGpu*,
54                                           GrMipmapStatus,
55                                           const Desc&,
56                                           sk_sp<GrGLTextureParameters>,
57                                           GrWrapCacheable, GrIOType);
58 
59     void dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const override;
60 
61 protected:
62     // Constructor for subclasses.
63     GrGLTexture(GrGLGpu*, const Desc&, sk_sp<GrGLTextureParameters>, GrMipmapStatus);
64 
65     // Constructor for instances wrapping backend objects.
66     GrGLTexture(GrGLGpu*,
67                 const Desc&,
68                 GrMipmapStatus,
69                 sk_sp<GrGLTextureParameters>,
70                 GrWrapCacheable,
71                 GrIOType);
72 
73     void init(const Desc&);
74 
75     void onAbandon() override;
76     void onRelease() override;
77 
78     bool onStealBackendTexture(GrBackendTexture*, SkImage::BackendTextureReleaseProc*) override;
79 
80 private:
81     sk_sp<GrGLTextureParameters> fParameters;
82     GrGLuint fID;
83     GrGLFormat fFormat;
84     GrBackendObjectOwnership fTextureIDOwnership;
85     bool fBaseLevelHasBeenBoundToFBO = false;
86 
87     using INHERITED = GrTexture;
88 };
89 
90 #endif
91