1 /*
2  * Copyright 2017 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 GrTextureProxyPriv_DEFINED
9 #define GrTextureProxyPriv_DEFINED
10 
11 #include "GrTextureProxy.h"
12 
13 class GrDeferredProxyUploader;
14 class GrOpFlushState;
15 
16 /**
17  * This class hides the more specialized capabilities of GrTextureProxy.
18  */
19 class GrTextureProxyPriv {
20 public:
21     // Attach a deferred uploader to the proxy. Holds data being prepared by a worker thread.
22     void setDeferredUploader(std::unique_ptr<GrDeferredProxyUploader>);
isDeferred()23     bool isDeferred() const { return SkToBool(fTextureProxy->fDeferredUploader.get()); }
24     // For a deferred proxy (one that has a deferred uploader attached), this schedules an ASAP
25     // upload of that data to the instantiated texture.
26     void scheduleUpload(GrOpFlushState*);
27     // Clears any deferred uploader object on the proxy. Used to free the CPU data after the
28     // contents have been uploaded.
29     void resetDeferredUploader();
30 
31 private:
GrTextureProxyPriv(GrTextureProxy * textureProxy)32     explicit GrTextureProxyPriv(GrTextureProxy* textureProxy) : fTextureProxy(textureProxy) {}
GrTextureProxyPriv(const GrTextureProxyPriv &)33     GrTextureProxyPriv(const GrTextureProxyPriv&) {} // unimpl
34     GrTextureProxyPriv& operator=(const GrTextureProxyPriv&); // unimpl
35 
36     // No taking addresses of this type.
37     const GrTextureProxyPriv* operator&() const;
38     GrTextureProxyPriv* operator&();
39 
40     GrTextureProxy* fTextureProxy;
41 
42     friend class GrTextureProxy;  // to construct/copy this type.
43 };
44 
texPriv()45 inline GrTextureProxyPriv GrTextureProxy::texPriv() { return GrTextureProxyPriv(this); }
46 
texPriv()47 inline const GrTextureProxyPriv GrTextureProxy::texPriv() const {
48     return GrTextureProxyPriv(const_cast<GrTextureProxy*>(this));
49 }
50 
51 #endif
52