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

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

Issue 1393283008: Image filters: refactor input GPU processing into filterInputGPU(). (Closed) Base URL: https://skia.googlesource.com/skia.git@filter-input
Patch Set: Update to ToT Created 5 years, 2 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/core/SkImageFilter.h ('k') | src/effects/SkBlurImageFilter.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 9
10 #include "SkBitmap.h" 10 #include "SkBitmap.h"
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 bool SkImageFilter::canFilterImageGPU() const { 322 bool SkImageFilter::canFilterImageGPU() const {
323 return this->asFragmentProcessor(nullptr, nullptr, SkMatrix::I(), SkIRect()) ; 323 return this->asFragmentProcessor(nullptr, nullptr, SkMatrix::I(), SkIRect()) ;
324 } 324 }
325 325
326 bool SkImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const Cont ext& ctx, 326 bool SkImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const Cont ext& ctx,
327 SkBitmap* result, SkIPoint* offset) const { 327 SkBitmap* result, SkIPoint* offset) const {
328 #if SK_SUPPORT_GPU 328 #if SK_SUPPORT_GPU
329 SkBitmap input = src; 329 SkBitmap input = src;
330 SkASSERT(fInputCount == 1); 330 SkASSERT(fInputCount == 1);
331 SkIPoint srcOffset = SkIPoint::Make(0, 0); 331 SkIPoint srcOffset = SkIPoint::Make(0, 0);
332 if (this->getInput(0) && 332 if (!this->filterInputGPU(0, proxy, src, ctx, &input, &srcOffset)) {
333 !this->getInput(0)->getInputResultGPU(proxy, src, ctx, &input, &srcOffse t)) {
334 return false; 333 return false;
335 } 334 }
336 GrTexture* srcTexture = input.getTexture(); 335 GrTexture* srcTexture = input.getTexture();
337 SkIRect bounds; 336 SkIRect bounds;
338 if (!this->applyCropRect(ctx, proxy, input, &srcOffset, &bounds, &input)) { 337 if (!this->applyCropRect(ctx, proxy, input, &srcOffset, &bounds, &input)) {
339 return false; 338 return false;
340 } 339 }
341 SkRect srcRect = SkRect::Make(bounds); 340 SkRect srcRect = SkRect::Make(bounds);
342 SkRect dstRect = SkRect::MakeWH(srcRect.width(), srcRect.height()); 341 SkRect dstRect = SkRect::MakeWH(srcRect.width(), srcRect.height());
343 GrContext* context = srcTexture->getContext(); 342 GrContext* context = srcTexture->getContext();
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 } 458 }
460 459
461 #if SK_SUPPORT_GPU 460 #if SK_SUPPORT_GPU
462 461
463 void SkImageFilter::WrapTexture(GrTexture* texture, int width, int height, SkBit map* result) { 462 void SkImageFilter::WrapTexture(GrTexture* texture, int width, int height, SkBit map* result) {
464 SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); 463 SkImageInfo info = SkImageInfo::MakeN32Premul(width, height);
465 result->setInfo(info); 464 result->setInfo(info);
466 result->setPixelRef(new SkGrPixelRef(info, texture))->unref(); 465 result->setPixelRef(new SkGrPixelRef(info, texture))->unref();
467 } 466 }
468 467
469 bool SkImageFilter::getInputResultGPU(SkImageFilter::Proxy* proxy, 468 bool SkImageFilter::filterInputGPU(int index, SkImageFilter::Proxy* proxy,
470 const SkBitmap& src, const Context& ctx, 469 const SkBitmap& src, const Context& ctx,
471 SkBitmap* result, SkIPoint* offset) const { 470 SkBitmap* result, SkIPoint* offset) const {
471 SkImageFilter* input = this->getInput(index);
472 if (!input) {
473 return true;
474 }
472 // Ensure that GrContext calls under filterImage and filterImageGPU below wi ll see an identity 475 // Ensure that GrContext calls under filterImage and filterImageGPU below wi ll see an identity
473 // matrix with no clip and that the matrix, clip, and render target set befo re this function was 476 // matrix with no clip and that the matrix, clip, and render target set befo re this function was
474 // called are restored before we return to the caller. 477 // called are restored before we return to the caller.
475 GrContext* context = src.getTexture()->getContext(); 478 GrContext* context = src.getTexture()->getContext();
476 479
477 if (this->canFilterImageGPU()) { 480 if (input->canFilterImageGPU()) {
478 return this->filterImageGPU(proxy, src, ctx, result, offset); 481 return input->filterImageGPU(proxy, src, ctx, result, offset);
479 } else { 482 } else {
480 if (this->filterImage(proxy, src, ctx, result, offset)) { 483 if (input->filterImage(proxy, src, ctx, result, offset)) {
481 if (!result->getTexture()) { 484 if (!result->getTexture()) {
482 const SkImageInfo info = result->info(); 485 const SkImageInfo info = result->info();
483 if (kUnknown_SkColorType == info.colorType()) { 486 if (kUnknown_SkColorType == info.colorType()) {
484 return false; 487 return false;
485 } 488 }
486 SkAutoTUnref<GrTexture> resultTex( 489 SkAutoTUnref<GrTexture> resultTex(
487 GrRefCachedBitmapTexture(context, *result,GrTextureParams::C lampNoFilter())); 490 GrRefCachedBitmapTexture(context, *result,GrTextureParams::C lampNoFilter()));
488 result->setPixelRef(new SkGrPixelRef(info, resultTex))->unref(); 491 result->setPixelRef(new SkGrPixelRef(info, resultTex))->unref();
489 } 492 }
490 return true; 493 return true;
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 } 613 }
611 return dev; 614 return dev;
612 } 615 }
613 616
614 bool SkImageFilter::DeviceProxy::filterImage(const SkImageFilter* filter, const SkBitmap& src, 617 bool SkImageFilter::DeviceProxy::filterImage(const SkImageFilter* filter, const SkBitmap& src,
615 const SkImageFilter::Context& ctx, 618 const SkImageFilter::Context& ctx,
616 SkBitmap* result, SkIPoint* offset) { 619 SkBitmap* result, SkIPoint* offset) {
617 return fDevice->filterImage(filter, src, ctx, result, offset); 620 return fDevice->filterImage(filter, src, ctx, result, offset);
618 } 621 }
619 622
OLDNEW
« no previous file with comments | « include/core/SkImageFilter.h ('k') | src/effects/SkBlurImageFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698