| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef SkImageFilter_DEFINED | 8 #ifndef SkImageFilter_DEFINED |
| 9 #define SkImageFilter_DEFINED | 9 #define SkImageFilter_DEFINED |
| 10 | 10 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 // By default, we cache only image filters with 2 or more children. | 54 // By default, we cache only image filters with 2 or more children. |
| 55 // Values less than 2 mean always cache; values greater than 2 are not s
upported. | 55 // Values less than 2 mean always cache; values greater than 2 are not s
upported. |
| 56 static Cache* Create(int minChildren = 2); | 56 static Cache* Create(int minChildren = 2); |
| 57 virtual ~Cache() {} | 57 virtual ~Cache() {} |
| 58 virtual bool get(const SkImageFilter* key, SkBitmap* result, SkIPoint* o
ffset) = 0; | 58 virtual bool get(const SkImageFilter* key, SkBitmap* result, SkIPoint* o
ffset) = 0; |
| 59 virtual void set(const SkImageFilter* key, | 59 virtual void set(const SkImageFilter* key, |
| 60 const SkBitmap& result, const SkIPoint& offset) = 0; | 60 const SkBitmap& result, const SkIPoint& offset) = 0; |
| 61 virtual void remove(const SkImageFilter* key) = 0; | 61 virtual void remove(const SkImageFilter* key) = 0; |
| 62 }; | 62 }; |
| 63 | 63 |
| 64 // This cache maps from (filter's unique ID + CTM + clipBounds + src bitmap
generation ID) to |
| 65 // (result, offset). |
| 66 class UniqueIDCache : public SkRefCnt { |
| 67 public: |
| 68 struct Key; |
| 69 virtual ~UniqueIDCache() {} |
| 70 static UniqueIDCache* Create(size_t maxBytes); |
| 71 static UniqueIDCache* Get(); |
| 72 virtual bool get(const Key& key, SkBitmap* result, SkIPoint* offset) con
st = 0; |
| 73 virtual void set(const Key& key, const SkBitmap& result, const SkIPoint&
offset) = 0; |
| 74 }; |
| 75 |
| 64 class Context { | 76 class Context { |
| 65 public: | 77 public: |
| 66 Context(const SkMatrix& ctm, const SkIRect& clipBounds, Cache* cache) : | 78 Context(const SkMatrix& ctm, const SkIRect& clipBounds, UniqueIDCache* c
ache) : |
| 67 fCTM(ctm), fClipBounds(clipBounds), fCache(cache) { | 79 fCTM(ctm), fClipBounds(clipBounds), fCache(cache) { |
| 68 } | 80 } |
| 69 const SkMatrix& ctm() const { return fCTM; } | 81 const SkMatrix& ctm() const { return fCTM; } |
| 70 const SkIRect& clipBounds() const { return fClipBounds; } | 82 const SkIRect& clipBounds() const { return fClipBounds; } |
| 71 Cache* cache() const { return fCache; } | 83 UniqueIDCache* cache() const { return fCache; } |
| 72 private: | 84 private: |
| 73 SkMatrix fCTM; | 85 SkMatrix fCTM; |
| 74 SkIRect fClipBounds; | 86 SkIRect fClipBounds; |
| 75 Cache* fCache; | 87 UniqueIDCache* fCache; |
| 76 }; | 88 }; |
| 77 | 89 |
| 78 class Proxy { | 90 class Proxy { |
| 79 public: | 91 public: |
| 80 virtual ~Proxy() {}; | 92 virtual ~Proxy() {}; |
| 81 | 93 |
| 82 virtual SkBaseDevice* createDevice(int width, int height) = 0; | 94 virtual SkBaseDevice* createDevice(int width, int height) = 0; |
| 83 // returns true if the proxy can handle this filter natively | 95 // returns true if the proxy can handle this filter natively |
| 84 virtual bool canHandleImageFilter(const SkImageFilter*) = 0; | 96 virtual bool canHandleImageFilter(const SkImageFilter*) = 0; |
| 85 // returns true if the proxy handled the filter itself. if this returns | 97 // returns true if the proxy handled the filter itself. if this returns |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 class Common { | 215 class Common { |
| 204 public: | 216 public: |
| 205 Common() {} | 217 Common() {} |
| 206 ~Common(); | 218 ~Common(); |
| 207 | 219 |
| 208 bool unflatten(SkReadBuffer&, int expectedInputs = -1); | 220 bool unflatten(SkReadBuffer&, int expectedInputs = -1); |
| 209 | 221 |
| 210 CropRect cropRect() const { return fCropRect; } | 222 CropRect cropRect() const { return fCropRect; } |
| 211 int inputCount() const { return fInputs.count(); } | 223 int inputCount() const { return fInputs.count(); } |
| 212 SkImageFilter** inputs() const { return fInputs.get(); } | 224 SkImageFilter** inputs() const { return fInputs.get(); } |
| 225 uint32_t uniqueID() const { return fUniqueID; } |
| 213 | 226 |
| 214 // If the caller wants a copy of the inputs, call this and it will trans
fer ownership | 227 // If the caller wants a copy of the inputs, call this and it will trans
fer ownership |
| 215 // of the unflattened input filters to the caller. This is just a short-
cut for copying | 228 // of the unflattened input filters to the caller. This is just a short-
cut for copying |
| 216 // the inputs, calling ref() on each, and then waiting for Common's dest
ructor to call | 229 // the inputs, calling ref() on each, and then waiting for Common's dest
ructor to call |
| 217 // unref() on each. | 230 // unref() on each. |
| 218 void detachInputs(SkImageFilter** inputs); | 231 void detachInputs(SkImageFilter** inputs); |
| 219 | 232 |
| 220 private: | 233 private: |
| 221 CropRect fCropRect; | 234 CropRect fCropRect; |
| 222 // most filters accept at most 2 input-filters | 235 // most filters accept at most 2 input-filters |
| 223 SkAutoSTArray<2, SkImageFilter*> fInputs; | 236 SkAutoSTArray<2, SkImageFilter*> fInputs; |
| 237 uint32_t fUniqueID; |
| 224 | 238 |
| 225 void allocInputs(int count); | 239 void allocInputs(int count); |
| 226 }; | 240 }; |
| 227 | 241 |
| 228 SkImageFilter(int inputCount, SkImageFilter** inputs, const CropRect* cropRe
ct = NULL); | 242 SkImageFilter(int inputCount, SkImageFilter** inputs, const CropRect* cropRe
ct = NULL); |
| 229 | 243 |
| 230 virtual ~SkImageFilter(); | 244 virtual ~SkImageFilter(); |
| 231 | 245 |
| 232 /** | 246 /** |
| 233 * Constructs a new SkImageFilter read from an SkReadBuffer object. | 247 * Constructs a new SkImageFilter read from an SkReadBuffer object. |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 * parameters before they are used in the effect. Note that this function | 315 * parameters before they are used in the effect. Note that this function |
| 302 * will be called with (NULL, NULL, SkMatrix::I()) to query for support, | 316 * will be called with (NULL, NULL, SkMatrix::I()) to query for support, |
| 303 * so returning "true" indicates support for all possible matrices. | 317 * so returning "true" indicates support for all possible matrices. |
| 304 */ | 318 */ |
| 305 virtual bool asNewEffect(GrEffect** effect, | 319 virtual bool asNewEffect(GrEffect** effect, |
| 306 GrTexture*, | 320 GrTexture*, |
| 307 const SkMatrix& matrix, | 321 const SkMatrix& matrix, |
| 308 const SkIRect& bounds) const; | 322 const SkIRect& bounds) const; |
| 309 | 323 |
| 310 private: | 324 private: |
| 325 bool usesSrcInput() const { return fUsesSrcInput; } |
| 326 |
| 311 typedef SkFlattenable INHERITED; | 327 typedef SkFlattenable INHERITED; |
| 312 int fInputCount; | 328 int fInputCount; |
| 313 SkImageFilter** fInputs; | 329 SkImageFilter** fInputs; |
| 330 bool fUsesSrcInput; |
| 314 CropRect fCropRect; | 331 CropRect fCropRect; |
| 332 uint32_t fUniqueID; // Globally unique |
| 315 }; | 333 }; |
| 316 | 334 |
| 317 #endif | 335 #endif |
| OLD | NEW |