diff options
author | Greg Daniel <egdaniel@google.com> | 2018-01-05 12:56:15 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-01-05 19:03:04 +0000 |
commit | 8982dc1a4c604d2fa1f0726e72f13e9dfb809e7d (patch) | |
tree | d08347a8e63a59e10195601d521bccc0154f6959 | |
parent | 262cd409663eb24ca0ecbcd6091d59894d42a030 (diff) |
Add GrResourceProviderPriv and expose GrGpu in it
Bug: skia:
Change-Id: Iad965ecf33c9dc75c4f068d547698d973f52eb94
Reviewed-on: https://skia-review.googlesource.com/91440
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
-rw-r--r-- | gn/gpu.gni | 1 | ||||
-rw-r--r-- | src/gpu/GrResourceProvider.h | 7 | ||||
-rw-r--r-- | src/gpu/GrResourceProviderPriv.h | 39 |
3 files changed, 47 insertions, 0 deletions
diff --git a/gn/gpu.gni b/gn/gpu.gni index f203437832..f41dc4ae45 100644 --- a/gn/gpu.gni +++ b/gn/gpu.gni @@ -169,6 +169,7 @@ skia_gpu_sources = [ "$_src/gpu/GrResourceHandle.h", "$_src/gpu/GrResourceProvider.cpp", "$_src/gpu/GrResourceProvider.h", + "$_src/gpu/GrResourceProviderPriv.h", "$_src/gpu/GrScissorState.h", "$_src/gpu/GrSemaphore.h", "$_src/gpu/GrShaderCaps.cpp", diff --git a/src/gpu/GrResourceProvider.h b/src/gpu/GrResourceProvider.h index f7f7850b31..64c9a8bea3 100644 --- a/src/gpu/GrResourceProvider.h +++ b/src/gpu/GrResourceProvider.h @@ -20,6 +20,7 @@ class GrBackendTexture; class GrGpu; class GrPath; class GrRenderTarget; +class GrResourceProviderPriv; class GrSemaphore; class GrSingleOwner; class GrStencilAttachment; @@ -275,6 +276,9 @@ public: const GrCaps* caps() const { return fCaps.get(); } bool overBudget() const { return fCache->overBudget(); } + inline GrResourceProviderPriv priv(); + inline const GrResourceProviderPriv priv() const; + private: sk_sp<GrGpuResource> findResourceByUniqueKey(const GrUniqueKey&); @@ -291,6 +295,9 @@ private: GrResourceCache* cache() { return fCache; } const GrResourceCache* cache() const { return fCache; } + friend class GrResourceProviderPriv; + + // Method made available via GrResourceProviderPriv GrGpu* gpu() { return fGpu; } const GrGpu* gpu() const { return fGpu; } diff --git a/src/gpu/GrResourceProviderPriv.h b/src/gpu/GrResourceProviderPriv.h new file mode 100644 index 0000000000..d7d73d86ca --- /dev/null +++ b/src/gpu/GrResourceProviderPriv.h @@ -0,0 +1,39 @@ +/* + * Copyright 2018 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrResourceProviderPriv_DEFINED +#define GrResourceProviderPriv_DEFINED + +#include "GrResourceProvider.h" + +/** Class that adds methods to GrResourceProvider that are only intended for use internal to Skia. + This class is purely a privileged window into GrResourceProvider. It should never have + additional data members or virtual methods. */ +class GrResourceProviderPriv { +public: + GrGpu* gpu() { return fResourceProvider->gpu(); } + +private: + explicit GrResourceProviderPriv(GrResourceProvider* provider) : fResourceProvider(provider) {} + GrResourceProviderPriv(const GrResourceProviderPriv&); // unimpl + GrResourceProviderPriv& operator=(const GrResourceProviderPriv&); // unimpl + + // No taking addresses of this type. + const GrResourceProviderPriv* operator&() const; + GrResourceProviderPriv* operator&(); + + GrResourceProvider* fResourceProvider; + friend class GrResourceProvider; // to construct/copy this type +}; + +inline GrResourceProviderPriv GrResourceProvider::priv() { return GrResourceProviderPriv(this); } + +inline const GrResourceProviderPriv GrResourceProvider::priv() const { + return GrResourceProviderPriv(const_cast<GrResourceProvider*>(this)); +} + +#endif |