Index: src/gpu/GrTexturePriv.h |
diff --git a/src/gpu/GrTexturePriv.h b/src/gpu/GrTexturePriv.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9a3e0e215bfe0e2c447cd55bb030ccfbf48d133b |
--- /dev/null |
+++ b/src/gpu/GrTexturePriv.h |
@@ -0,0 +1,82 @@ |
+/* |
+ * Copyright 2014 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#ifndef GrTexturePriv_DEFINED |
+#define GrTexturePriv_DEFINED |
+ |
+#include "GrTexture.h" |
+ |
+/** Class that adds methods to GrTexture that are only intended for use internal to Skia. |
+ This class is purely a privileged window into GrTexture. It should never have additional data |
+ members or virtual methods. |
+ Non-static methods that are not trivial inlines should be spring-boarded (e.g. declared and |
+ implemented privately in GrTexture with a inline public method here). */ |
+class GrTexturePriv { |
+public: |
+ void setFlag(GrTextureFlags flags) { |
+ fTexture->fDesc.fFlags = fTexture->fDesc.fFlags | flags; |
+ } |
+ |
+ void resetFlag(GrTextureFlags flags) { |
+ fTexture->fDesc.fFlags = fTexture->fDesc.fFlags & ~flags; |
+ } |
+ |
+ bool isSetFlag(GrTextureFlags flags) const { |
+ return 0 != (fTexture->fDesc.fFlags & flags); |
+ } |
+ |
+ void dirtyMipMaps(bool mipMapsDirty) { fTexture->dirtyMipMaps(mipMapsDirty); } |
+ |
+ bool mipMapsAreDirty() const { |
+ return GrTexture::kValid_MipMapsStatus != fTexture->fMipMapsStatus; |
+ } |
+ |
+ bool hasMipMaps() const { |
+ return GrTexture::kNotAllocated_MipMapsStatus != fTexture->fMipMapsStatus; |
+ } |
+ |
+ static GrResourceKey ComputeKey(const GrGpu* gpu, |
+ const GrTextureParams* params, |
+ const GrTextureDesc& desc, |
+ const GrCacheID& cacheID); |
+ static GrResourceKey ComputeScratchKey(const GrTextureDesc& desc); |
+ static bool NeedsResizing(const GrResourceKey& key); |
+ static bool NeedsBilerp(const GrResourceKey& key); |
+ |
+ |
+ // TODO: Move this logic and the shift values out of here and to the callers. |
+ SkFixed normalizeFixedX(SkFixed x) const { |
+ SkASSERT(SkIsPow2(fTexture->fDesc.fWidth)); |
+ return x >> fTexture->fShiftFixedX; |
+ } |
+ |
+ SkFixed normalizeFixedY(SkFixed y) const { |
+ SkASSERT(SkIsPow2(fTexture->fDesc.fHeight)); |
+ return y >> fTexture->fShiftFixedY; |
+ } |
+ |
+private: |
+ GrTexturePriv(GrTexture* texture) : fTexture(texture) { } |
+ GrTexturePriv(const GrTexturePriv& that) : fTexture(that.fTexture) { } |
+ GrTexturePriv& operator=(const GrTexturePriv&); // unimpl |
+ |
+ // No taking addresses of this type. |
+ const GrTexturePriv* operator&() const; |
+ GrTexturePriv* operator&(); |
+ |
+ GrTexture* fTexture; |
+ |
+ friend class GrTexture; // to construct/copy this type. |
+}; |
+ |
+inline GrTexturePriv GrTexture::texturePriv() { return GrTexturePriv(this); } |
+ |
+inline const GrTexturePriv GrTexture::texturePriv () const { |
+ return GrTexturePriv(const_cast<GrTexture*>(this)); |
+} |
+ |
+#endif |