OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 The Android Open Source Project | 2 * Copyright 2012 The Android Open Source Project |
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 #include "SkImageFilter.h" | 8 #include "SkImageFilter.h" |
9 | 9 |
10 #include "SkBitmap.h" | 10 #include "SkBitmap.h" |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 } | 220 } |
221 } | 221 } |
222 } | 222 } |
223 | 223 |
224 bool SkImageFilter::onFilterImage(Proxy*, const SkBitmap&, const Context&, | 224 bool SkImageFilter::onFilterImage(Proxy*, const SkBitmap&, const Context&, |
225 SkBitmap*, SkIPoint*) const { | 225 SkBitmap*, SkIPoint*) const { |
226 return false; | 226 return false; |
227 } | 227 } |
228 | 228 |
229 bool SkImageFilter::canFilterImageGPU() const { | 229 bool SkImageFilter::canFilterImageGPU() const { |
230 return this->asNewEffect(NULL, NULL, SkMatrix::I(), SkIRect()); | 230 return this->asFragmentProcessor(NULL, NULL, SkMatrix::I(), SkIRect()); |
231 } | 231 } |
232 | 232 |
233 bool SkImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const Cont
ext& ctx, | 233 bool SkImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const Cont
ext& ctx, |
234 SkBitmap* result, SkIPoint* offset) const { | 234 SkBitmap* result, SkIPoint* offset) const { |
235 #if SK_SUPPORT_GPU | 235 #if SK_SUPPORT_GPU |
236 SkBitmap input = src; | 236 SkBitmap input = src; |
237 SkASSERT(fInputCount == 1); | 237 SkASSERT(fInputCount == 1); |
238 SkIPoint srcOffset = SkIPoint::Make(0, 0); | 238 SkIPoint srcOffset = SkIPoint::Make(0, 0); |
239 if (this->getInput(0) && | 239 if (this->getInput(0) && |
240 !this->getInput(0)->getInputResultGPU(proxy, src, ctx, &input, &srcOffse
t)) { | 240 !this->getInput(0)->getInputResultGPU(proxy, src, ctx, &input, &srcOffse
t)) { |
(...skipping 15 matching lines...) Expand all Loading... |
256 desc.fConfig = kRGBA_8888_GrPixelConfig; | 256 desc.fConfig = kRGBA_8888_GrPixelConfig; |
257 | 257 |
258 GrAutoScratchTexture dst(context, desc); | 258 GrAutoScratchTexture dst(context, desc); |
259 if (NULL == dst.texture()) { | 259 if (NULL == dst.texture()) { |
260 return false; | 260 return false; |
261 } | 261 } |
262 GrContext::AutoMatrix am; | 262 GrContext::AutoMatrix am; |
263 am.setIdentity(context); | 263 am.setIdentity(context); |
264 GrContext::AutoRenderTarget art(context, dst.texture()->asRenderTarget()); | 264 GrContext::AutoRenderTarget art(context, dst.texture()->asRenderTarget()); |
265 GrContext::AutoClip acs(context, dstRect); | 265 GrContext::AutoClip acs(context, dstRect); |
266 GrEffect* effect; | 266 GrFragmentProcessor* fp; |
267 offset->fX = bounds.left(); | 267 offset->fX = bounds.left(); |
268 offset->fY = bounds.top(); | 268 offset->fY = bounds.top(); |
269 bounds.offset(-srcOffset); | 269 bounds.offset(-srcOffset); |
270 SkMatrix matrix(ctx.ctm()); | 270 SkMatrix matrix(ctx.ctm()); |
271 matrix.postTranslate(SkIntToScalar(-bounds.left()), SkIntToScalar(-bounds.to
p())); | 271 matrix.postTranslate(SkIntToScalar(-bounds.left()), SkIntToScalar(-bounds.to
p())); |
272 this->asNewEffect(&effect, srcTexture, matrix, bounds); | 272 this->asFragmentProcessor(&fp, srcTexture, matrix, bounds); |
273 SkASSERT(effect); | 273 SkASSERT(fp); |
274 GrPaint paint; | 274 GrPaint paint; |
275 paint.addColorEffect(effect)->unref(); | 275 paint.addColorProcessor(fp)->unref(); |
276 context->drawRectToRect(paint, dstRect, srcRect); | 276 context->drawRectToRect(paint, dstRect, srcRect); |
277 | 277 |
278 SkAutoTUnref<GrTexture> resultTex(dst.detach()); | 278 SkAutoTUnref<GrTexture> resultTex(dst.detach()); |
279 WrapTexture(resultTex, bounds.width(), bounds.height(), result); | 279 WrapTexture(resultTex, bounds.width(), bounds.height(), result); |
280 return true; | 280 return true; |
281 #else | 281 #else |
282 return false; | 282 return false; |
283 #endif | 283 #endif |
284 } | 284 } |
285 | 285 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 bounds.join(rect); | 358 bounds.join(rect); |
359 } | 359 } |
360 } | 360 } |
361 | 361 |
362 // don't modify dst until now, so we don't accidentally change it in the | 362 // don't modify dst until now, so we don't accidentally change it in the |
363 // loop, but then return false on the next filter. | 363 // loop, but then return false on the next filter. |
364 *dst = bounds; | 364 *dst = bounds; |
365 return true; | 365 return true; |
366 } | 366 } |
367 | 367 |
368 bool SkImageFilter::asNewEffect(GrEffect**, GrTexture*, const SkMatrix&, const S
kIRect&) const { | 368 bool SkImageFilter::asFragmentProcessor(GrFragmentProcessor**, GrTexture*, const
SkMatrix&, |
| 369 const SkIRect&) const { |
369 return false; | 370 return false; |
370 } | 371 } |
371 | 372 |
372 bool SkImageFilter::asColorFilter(SkColorFilter**) const { | 373 bool SkImageFilter::asColorFilter(SkColorFilter**) const { |
373 return false; | 374 return false; |
374 } | 375 } |
375 | 376 |
376 #if SK_SUPPORT_GPU | 377 #if SK_SUPPORT_GPU |
377 | 378 |
378 void SkImageFilter::WrapTexture(GrTexture* texture, int width, int height, SkBit
map* result) { | 379 void SkImageFilter::WrapTexture(GrTexture* texture, int width, int height, SkBit
map* result) { |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 } // namespace | 493 } // namespace |
493 | 494 |
494 SkImageFilter::Cache* SkImageFilter::Cache::Create(size_t maxBytes) { | 495 SkImageFilter::Cache* SkImageFilter::Cache::Create(size_t maxBytes) { |
495 return SkNEW_ARGS(CacheImpl, (maxBytes)); | 496 return SkNEW_ARGS(CacheImpl, (maxBytes)); |
496 } | 497 } |
497 | 498 |
498 SkImageFilter::Cache* SkImageFilter::Cache::Get() { | 499 SkImageFilter::Cache* SkImageFilter::Cache::Get() { |
499 SK_DECLARE_STATIC_LAZY_PTR(SkImageFilter::Cache, cache, CreateCache); | 500 SK_DECLARE_STATIC_LAZY_PTR(SkImageFilter::Cache, cache, CreateCache); |
500 return cache.get(); | 501 return cache.get(); |
501 } | 502 } |
OLD | NEW |