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 "src/gpu/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>); |
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: |
32 | explicit GrTextureProxyPriv(GrTextureProxy* textureProxy) : fTextureProxy(textureProxy) {} |
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 | |
45 | inline GrTextureProxyPriv GrTextureProxy::texPriv() { return GrTextureProxyPriv(this); } |
46 | |
47 | inline const GrTextureProxyPriv GrTextureProxy::texPriv() const { |
48 | return GrTextureProxyPriv(const_cast<GrTextureProxy*>(this)); |
49 | } |
50 | |
51 | #endif |
52 |