• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2016 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 #ifndef GrTextureContext_DEFINED
9 #define GrTextureContext_DEFINED
10 
11 #include "GrSurfaceContext.h"
12 #include "../private/GrTextureProxy.h"
13 
14 class GrContext;
15 class GrDrawingManager;
16 class GrSurface;
17 class GrTextureOpList;
18 class GrTextureProxy;
19 struct SkIPoint;
20 struct SkIRect;
21 
22 /**
23  * A helper object to orchestrate commands (currently just copies) for GrSurfaces that are
24  * GrTextures and not GrRenderTargets.
25  */
26 class SK_API GrTextureContext : public GrSurfaceContext {
27 public:
28     ~GrTextureContext() override;
29 
asSurfaceProxy()30     GrSurfaceProxy* asSurfaceProxy() override { return fTextureProxy.get(); }
asSurfaceProxy()31     const GrSurfaceProxy* asSurfaceProxy() const override { return fTextureProxy.get(); }
asSurfaceProxyRef()32     sk_sp<GrSurfaceProxy> asSurfaceProxyRef() override { return fTextureProxy; }
33 
asTextureProxy()34     GrTextureProxy* asTextureProxy() override { return fTextureProxy.get(); }
asTextureProxy()35     const GrTextureProxy* asTextureProxy() const override { return fTextureProxy.get(); }
asTextureProxyRef()36     sk_sp<GrTextureProxy> asTextureProxyRef() override { return fTextureProxy; }
37 
38     GrRenderTargetProxy* asRenderTargetProxy() override;
39     sk_sp<GrRenderTargetProxy> asRenderTargetProxyRef() override;
40 
41 protected:
42     GrTextureContext(GrContext*, GrDrawingManager*, sk_sp<GrTextureProxy>,
43                      sk_sp<SkColorSpace>, GrAuditTrail*, GrSingleOwner*);
44 
45     SkDEBUGCODE(void validate() const override;)
46 
47 private:
48     friend class GrDrawingManager; // for ctor
49 
50     GrOpList* getOpList() override;
51 
52     sk_sp<GrTextureProxy>        fTextureProxy;
53 
54     // In MDB-mode the GrOpList can be closed by some other renderTargetContext that has picked
55     // it up. For this reason, the GrOpList should only ever be accessed via 'getOpList'.
56     sk_sp<GrTextureOpList>       fOpList;
57 
58     typedef GrSurfaceContext INHERITED;
59 };
60 
61 #endif
62