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 // TODO: Move this logic and the shift values out of here and to the callers. normalizeFixedX(SkFixed x)45 SkFixed normalizeFixedX(SkFixed x) const { 46 SkASSERT(SkIsPow2(fTexture->fDesc.fWidth)); 47 return x >> fTexture->fShiftFixedX; 48 } 49 normalizeFixedY(SkFixed y)50 SkFixed normalizeFixedY(SkFixed y) const { 51 SkASSERT(SkIsPow2(fTexture->fDesc.fHeight)); 52 return y >> fTexture->fShiftFixedY; 53 } 54 55 private: GrTexturePriv(GrTexture * texture)56 GrTexturePriv(GrTexture* texture) : fTexture(texture) { } GrTexturePriv(const GrTexturePriv & that)57 GrTexturePriv(const GrTexturePriv& that) : fTexture(that.fTexture) { } 58 GrTexturePriv& operator=(const GrTexturePriv&); // unimpl 59 60 // No taking addresses of this type. 61 const GrTexturePriv* operator&() const; 62 GrTexturePriv* operator&(); 63 64 GrTexture* fTexture; 65 66 friend class GrTexture; // to construct/copy this type. 67 }; 68 texturePriv()69inline GrTexturePriv GrTexture::texturePriv() { return GrTexturePriv(this); } 70 texturePriv()71inline const GrTexturePriv GrTexture::texturePriv () const { 72 return GrTexturePriv(const_cast<GrTexture*>(this)); 73 } 74 75 #endif 76