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 GrTextureProxyCacheAccess_DEFINED 9 #define GrTextureProxyCacheAccess_DEFINED 10 11 #include "src/gpu/GrTextureProxy.h" 12 13 /** 14 * This class allows GrResourceCache increased privileged access to GrTextureProxy objects. 15 */ 16 class GrTextureProxy::CacheAccess { 17 private: setUniqueKey(GrProxyProvider * proxyProvider,const skgpu::UniqueKey & key)18 void setUniqueKey(GrProxyProvider* proxyProvider, const skgpu::UniqueKey& key) { 19 fTextureProxy->setUniqueKey(proxyProvider, key); 20 } 21 clearUniqueKey()22 void clearUniqueKey() { 23 fTextureProxy->clearUniqueKey(); 24 } 25 CacheAccess(GrTextureProxy * textureProxy)26 explicit CacheAccess(GrTextureProxy* textureProxy) : fTextureProxy(textureProxy) {} 27 CacheAccess& operator=(const CacheAccess&) = delete; 28 29 // No taking addresses of this type. 30 const CacheAccess* operator&() const; 31 CacheAccess* operator&(); 32 33 GrTextureProxy* fTextureProxy; 34 35 friend class GrTextureProxy; // to construct/copy this type. 36 friend class GrProxyProvider; // to use this type 37 }; 38 cacheAccess()39inline GrTextureProxy::CacheAccess GrTextureProxy::cacheAccess() { return CacheAccess(this); } 40 cacheAccess()41inline const GrTextureProxy::CacheAccess GrTextureProxy::cacheAccess() const { // NOLINT(readability-const-return-type) 42 return CacheAccess(const_cast<GrTextureProxy*>(this)); 43 } 44 45 #endif 46