Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(161)

Side by Side Diff: src/core/SkImageFilter.cpp

Issue 1879643003: Switch AlphaThresholdFilter over to new onFilterImage interface (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix serialize-8888 config (deserialize crop rect) Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « include/effects/SkAlphaThresholdFilter.h ('k') | src/effects/SkAlphaThresholdFilter.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "SkImageFilterCacheKey.h" 9 #include "SkImageFilterCacheKey.h"
10 10
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 return false; 407 return false;
408 } 408 }
409 GrTexture* srcTexture = input.getTexture(); 409 GrTexture* srcTexture = input.getTexture();
410 SkIRect bounds; 410 SkIRect bounds;
411 if (!this->applyCropRectDeprecated(ctx, proxy, input, &srcOffset, &bounds, & input)) { 411 if (!this->applyCropRectDeprecated(ctx, proxy, input, &srcOffset, &bounds, & input)) {
412 return false; 412 return false;
413 } 413 }
414 GrContext* context = srcTexture->getContext(); 414 GrContext* context = srcTexture->getContext();
415 415
416 GrSurfaceDesc desc; 416 GrSurfaceDesc desc;
417 desc.fFlags = kRenderTarget_GrSurfaceFlag, 417 desc.fFlags = kRenderTarget_GrSurfaceFlag;
418 desc.fWidth = bounds.width(); 418 desc.fWidth = bounds.width();
419 desc.fHeight = bounds.height(); 419 desc.fHeight = bounds.height();
420 desc.fConfig = kRGBA_8888_GrPixelConfig; 420 desc.fConfig = kRGBA_8888_GrPixelConfig;
421 421
422 SkAutoTUnref<GrTexture> dst(context->textureProvider()->createApproxTexture( desc)); 422 SkAutoTUnref<GrTexture> dst(context->textureProvider()->createApproxTexture( desc));
423 if (!dst) { 423 if (!dst) {
424 return false; 424 return false;
425 } 425 }
426 426
427 GrFragmentProcessor* fp; 427 GrFragmentProcessor* fp;
(...skipping 17 matching lines...) Expand all
445 drawContext->fillRectToRect(clip, paint, SkMatrix::I(), dstRect, src Rect); 445 drawContext->fillRectToRect(clip, paint, SkMatrix::I(), dstRect, src Rect);
446 446
447 GrWrapTextureInBitmap(dst, bounds.width(), bounds.height(), false, r esult); 447 GrWrapTextureInBitmap(dst, bounds.width(), bounds.height(), false, r esult);
448 return true; 448 return true;
449 } 449 }
450 } 450 }
451 #endif 451 #endif
452 return false; 452 return false;
453 } 453 }
454 454
455 #if SK_SUPPORT_GPU
456 sk_sp<SkSpecialImage> SkImageFilter::DrawWithFP(GrContext* context,
457 sk_sp<GrFragmentProcessor> fp,
458 const SkIRect& bounds,
459 SkImageFilter::Proxy* proxy) {
460 GrPaint paint;
461 paint.addColorFragmentProcessor(fp.get());
462 paint.setPorterDuffXPFactory(SkXfermode::kSrc_Mode);
463
464 GrSurfaceDesc desc;
465 desc.fFlags = kRenderTarget_GrSurfaceFlag;
466 desc.fWidth = bounds.width();
467 desc.fHeight = bounds.height();
468 desc.fConfig = kRGBA_8888_GrPixelConfig;
469
470 sk_sp<GrTexture> dst(context->textureProvider()->createApproxTexture(desc));
471 if (!dst) {
472 return nullptr;
473 }
474
475 sk_sp<GrDrawContext> drawContext(context->drawContext(dst->asRenderTarget()) );
476 if (!drawContext) {
477 return nullptr;
478 }
479
480 SkRect srcRect = SkRect::Make(bounds);
481 SkRect dstRect = SkRect::MakeWH(srcRect.width(), srcRect.height());
482 GrClip clip(dstRect);
483 drawContext->fillRectToRect(clip, paint, SkMatrix::I(), dstRect, srcRect);
484
485 return SkSpecialImage::MakeFromGpu(proxy,
486 SkIRect::MakeWH(bounds.width(), bounds.he ight()),
487 kNeedNewImageUniqueID_SpecialImage,
488 dst.get());
489
490 }
491 #endif
492
455 bool SkImageFilter::asAColorFilter(SkColorFilter** filterPtr) const { 493 bool SkImageFilter::asAColorFilter(SkColorFilter** filterPtr) const {
456 SkASSERT(nullptr != filterPtr); 494 SkASSERT(nullptr != filterPtr);
457 if (!this->isColorFilterNode(filterPtr)) { 495 if (!this->isColorFilterNode(filterPtr)) {
458 return false; 496 return false;
459 } 497 }
460 if (nullptr != this->getInput(0) || (*filterPtr)->affectsTransparentBlack()) { 498 if (nullptr != this->getInput(0) || (*filterPtr)->affectsTransparentBlack()) {
461 (*filterPtr)->unref(); 499 (*filterPtr)->unref();
462 return false; 500 return false;
463 } 501 }
464 return true; 502 return true;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 561
524 src->draw(canvas, offX, offY, nullptr); 562 src->draw(canvas, offX, offY, nullptr);
525 563
526 return surf->makeImageSnapshot(); 564 return surf->makeImageSnapshot();
527 } 565 }
528 566
529 sk_sp<SkSpecialImage> SkImageFilter::applyCropRect(const Context& ctx, 567 sk_sp<SkSpecialImage> SkImageFilter::applyCropRect(const Context& ctx,
530 SkSpecialImage* src, 568 SkSpecialImage* src,
531 SkIPoint* srcOffset, 569 SkIPoint* srcOffset,
532 SkIRect* bounds) const { 570 SkIRect* bounds) const {
533 SkIRect srcBounds; 571 const SkIRect srcBounds = SkIRect::MakeXYWH(srcOffset->x(), srcOffset->y(),
534 srcBounds = SkIRect::MakeXYWH(srcOffset->fX, srcOffset->fY, src->width(), sr c->height()); 572 src->width(), src->height());
535 573
536 SkIRect dstBounds = this->onFilterNodeBounds(srcBounds, ctx.ctm(), kForward_ MapDirection); 574 SkIRect dstBounds = this->onFilterNodeBounds(srcBounds, ctx.ctm(), kForward_ MapDirection);
537 fCropRect.applyTo(dstBounds, ctx.ctm(), this->affectsTransparentBlack(), bou nds); 575 fCropRect.applyTo(dstBounds, ctx.ctm(), this->affectsTransparentBlack(), bou nds);
538 if (!bounds->intersect(ctx.clipBounds())) { 576 if (!bounds->intersect(ctx.clipBounds())) {
539 return nullptr; 577 return nullptr;
540 } 578 }
541 579
542 if (srcBounds.contains(*bounds)) { 580 if (srcBounds.contains(*bounds)) {
543 return sk_sp<SkSpecialImage>(SkRef(src)); 581 return sk_sp<SkSpecialImage>(SkRef(src));
544 } else { 582 } else {
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
829 dev = SkBitmapDevice::Create(cinfo.fInfo, surfaceProps); 867 dev = SkBitmapDevice::Create(cinfo.fInfo, surfaceProps);
830 } 868 }
831 return dev; 869 return dev;
832 } 870 }
833 871
834 bool SkImageFilter::DeviceProxy::filterImage(const SkImageFilter* filter, const SkBitmap& src, 872 bool SkImageFilter::DeviceProxy::filterImage(const SkImageFilter* filter, const SkBitmap& src,
835 const SkImageFilter::Context& ctx, 873 const SkImageFilter::Context& ctx,
836 SkBitmap* result, SkIPoint* offset) { 874 SkBitmap* result, SkIPoint* offset) {
837 return fDevice->filterImage(filter, src, ctx, result, offset); 875 return fDevice->filterImage(filter, src, ctx, result, offset);
838 } 876 }
OLDNEW
« no previous file with comments | « include/effects/SkAlphaThresholdFilter.h ('k') | src/effects/SkAlphaThresholdFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698