1 /* 2 * Copyright 2014 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 GrTexturePriv_DEFINED 9 #define GrTexturePriv_DEFINED 10 11 #include "GrTexture.h" 12 13 /** Class that adds methods to GrTexture that are only intended for use internal to Skia. 14 This class is purely a privileged window into GrTexture. It should never have additional data 15 members or virtual methods. 16 Non-static methods that are not trivial inlines should be spring-boarded (e.g. declared and 17 implemented privately in GrTexture with a inline public method here). */ 18 class GrTexturePriv { 19 public: setFlag(GrSurfaceFlags flags)20 void setFlag(GrSurfaceFlags flags) { 21 fTexture->fDesc.fFlags = fTexture->fDesc.fFlags | flags; 22 } 23 resetFlag(GrSurfaceFlags flags)24 void resetFlag(GrSurfaceFlags flags) { 25 fTexture->fDesc.fFlags = fTexture->fDesc.fFlags & ~flags; 26 } 27 isSetFlag(GrSurfaceFlags flags)28 bool isSetFlag(GrSurfaceFlags flags) const { 29 return 0 != (fTexture->fDesc.fFlags & flags); 30 } 31 dirtyMipMaps(bool mipMapsDirty)32 void dirtyMipMaps(bool mipMapsDirty) { fTexture->dirtyMipMaps(mipMapsDirty); } 33 mipMapsAreDirty()34 bool mipMapsAreDirty() const { 35 return GrTexture::kValid_MipMapsStatus != fTexture->fMipMapsStatus; 36 } 37 hasMipMaps()38 bool hasMipMaps() const { 39 return GrTexture::kNotAllocated_MipMapsStatus != fTexture->fMipMapsStatus; 40 } 41 42 static void ComputeScratchKey(const GrSurfaceDesc&, GrScratchKey*); 43 44 private: GrTexturePriv(GrTexture * texture)45 GrTexturePriv(GrTexture* texture) : fTexture(texture) { } GrTexturePriv(const GrTexturePriv & that)46 GrTexturePriv(const GrTexturePriv& that) : fTexture(that.fTexture) { } 47 GrTexturePriv& operator=(const GrTexturePriv&); // unimpl 48 49 // No taking addresses of this type. 50 const GrTexturePriv* operator&() const; 51 GrTexturePriv* operator&(); 52 53 GrTexture* fTexture; 54 55 friend class GrTexture; // to construct/copy this type. 56 }; 57 texturePriv()58inline GrTexturePriv GrTexture::texturePriv() { return GrTexturePriv(this); } 59 texturePriv()60inline const GrTexturePriv GrTexture::texturePriv () const { 61 return GrTexturePriv(const_cast<GrTexture*>(this)); 62 } 63 64 #endif 65