Index: src/effects/gradients/SkGradientShaderPriv.h |
diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h |
index e01609462b6ea22038f24562a8d982383a03c362..83e0789853181950a65b8c70b30dcc5c64b4ad96 100644 |
--- a/src/effects/gradients/SkGradientShaderPriv.h |
+++ b/src/effects/gradients/SkGradientShaderPriv.h |
@@ -19,7 +19,6 @@ |
#include "SkTemplates.h" |
#include "SkBitmapCache.h" |
#include "SkShader.h" |
-#include "SkOnce.h" |
static inline void sk_memset32_dither(uint32_t dst[], uint32_t v0, uint32_t v1, |
int count) { |
@@ -102,64 +101,8 @@ |
SkGradientShaderBase(const Descriptor& desc); |
virtual ~SkGradientShaderBase(); |
- // The cache is initialized on-demand when getCache16/32 is called. |
- class GradientShaderCache : public SkRefCnt { |
- public: |
- GradientShaderCache(U8CPU alpha, const SkGradientShaderBase& shader); |
- ~GradientShaderCache(); |
- |
- const uint16_t* getCache16(); |
- const SkPMColor* getCache32(); |
- |
- SkMallocPixelRef* getCache32PixelRef() const { return fCache32PixelRef; } |
- |
- unsigned getAlpha() const { return fCacheAlpha; } |
- |
- private: |
- // Working pointers. If either is NULL, we need to recompute the corresponding cache values. |
- uint16_t* fCache16; |
- SkPMColor* fCache32; |
- |
- uint16_t* fCache16Storage; // Storage for fCache16, allocated on demand. |
- SkMallocPixelRef* fCache32PixelRef; |
- const unsigned fCacheAlpha; // The alpha value we used when we computed the cache. |
- // Larger than 8bits so we can store uninitialized |
- // value. |
- |
- const SkGradientShaderBase& fShader; |
- |
- // Make sure we only initialize the caches once. |
- bool fCache16Inited, fCache32Inited; |
- SkMutex fCache16Mutex, fCache32Mutex; |
- |
- static void initCache16(GradientShaderCache* cache); |
- static void initCache32(GradientShaderCache* cache); |
- |
- static void Build16bitCache(uint16_t[], SkColor c0, SkColor c1, int count); |
- static void Build32bitCache(SkPMColor[], SkColor c0, SkColor c1, int count, |
- U8CPU alpha, uint32_t gradFlags); |
- }; |
- |
- class GradientShaderBaseContext : public SkShader::Context { |
- public: |
- GradientShaderBaseContext(const SkGradientShaderBase& shader, const SkBitmap& device, |
- const SkPaint& paint, const SkMatrix& matrix); |
- ~GradientShaderBaseContext() {} |
- |
- virtual uint32_t getFlags() const SK_OVERRIDE { return fFlags; } |
- |
- protected: |
- SkMatrix fDstToIndex; |
- SkMatrix::MapXYProc fDstToIndexProc; |
- uint8_t fDstToIndexClass; |
- uint8_t fFlags; |
- |
- SkAutoTUnref<GradientShaderCache> fCache; |
- |
- private: |
- typedef SkShader::Context INHERITED; |
- }; |
- |
+ virtual bool setContext(const SkBitmap&, const SkPaint&, const SkMatrix&) SK_OVERRIDE; |
+ virtual uint32_t getFlags() SK_OVERRIDE { return fFlags; } |
virtual bool isOpaque() const SK_OVERRIDE; |
void getGradientTableBitmap(SkBitmap*) const; |
@@ -185,6 +128,7 @@ |
kDitherStride16 = kCache16Count, |
}; |
+ |
protected: |
SkGradientShaderBase(SkReadBuffer& ); |
virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; |
@@ -192,9 +136,13 @@ |
SkUnitMapper* fMapper; |
SkMatrix fPtsToUnit; // set by subclass |
+ SkMatrix fDstToIndex; |
+ SkMatrix::MapXYProc fDstToIndexProc; |
TileMode fTileMode; |
TileProc fTileProc; |
int fColorCount; |
+ uint8_t fDstToIndexClass; |
+ uint8_t fFlags; |
uint8_t fGradFlags; |
struct Rec { |
@@ -203,6 +151,9 @@ |
}; |
Rec* fRecs; |
+ const uint16_t* getCache16() const; |
+ const SkPMColor* getCache32() const; |
+ |
void commonAsAGradient(GradientInfo*) const; |
private: |
@@ -212,13 +163,20 @@ |
kStorageSize = kColorStorageCount * (sizeof(SkColor) + sizeof(Rec)) |
}; |
SkColor fStorage[(kStorageSize + 3) >> 2]; |
- SkColor* fOrigColors; // original colors, before modulation by paint in context. |
+ SkColor* fOrigColors; // original colors, before modulation by paint in setContext |
bool fColorsAreOpaque; |
- GradientShaderCache* getCache(U8CPU alpha) const; |
- mutable SkMutex fCacheMutex; |
- mutable SkAutoTUnref<GradientShaderCache> fCache; |
- |
+ mutable uint16_t* fCache16; // working ptr. If this is NULL, we need to recompute the cache values |
+ mutable SkPMColor* fCache32; // working ptr. If this is NULL, we need to recompute the cache values |
+ |
+ mutable uint16_t* fCache16Storage; // storage for fCache16, allocated on demand |
+ mutable SkMallocPixelRef* fCache32PixelRef; |
+ mutable unsigned fCacheAlpha; // the alpha value we used when we computed the cache. larger than 8bits so we can store uninitialized value |
+ |
+ static void Build16bitCache(uint16_t[], SkColor c0, SkColor c1, int count); |
+ static void Build32bitCache(SkPMColor[], SkColor c0, SkColor c1, int count, |
+ U8CPU alpha, uint32_t gradFlags); |
+ void setCacheAlpha(U8CPU alpha) const; |
void initCommon(); |
typedef SkShader INHERITED; |