| Index: src/effects/gradients/SkGradientShaderPriv.h
|
| diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h
|
| index 5dec665ea12e1e0318357860f7228408fc995b74..02bb50bf5b37cfb77023d04cb07faba0bff6bf02 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;
|
| @@ -205,9 +148,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 {
|
| @@ -215,6 +162,9 @@
|
| uint32_t fScale; // (1 << 24) / range
|
| };
|
| Rec* fRecs;
|
| +
|
| + const uint16_t* getCache16() const;
|
| + const SkPMColor* getCache32() const;
|
|
|
| void commonAsAGradient(GradientInfo*, bool flipGrad = false) const;
|
|
|
| @@ -241,13 +191,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* refCache(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;
|
|
|