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

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

Issue 1845283003: Gamma-correctness pushed into Skia, top-down. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Rebase 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
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 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 } 288 }
289 289
290 bool SkImageFilter::filterInputDeprecated(int index, Proxy* proxy, const SkBitma p& src, 290 bool SkImageFilter::filterInputDeprecated(int index, Proxy* proxy, const SkBitma p& src,
291 const Context& ctx, 291 const Context& ctx,
292 SkBitmap* result, SkIPoint* offset) co nst { 292 SkBitmap* result, SkIPoint* offset) co nst {
293 SkImageFilter* input = this->getInput(index); 293 SkImageFilter* input = this->getInput(index);
294 if (!input) { 294 if (!input) {
295 return true; 295 return true;
296 } 296 }
297 297
298 sk_sp<SkSpecialImage> specialSrc(SkSpecialImage::internal_fromBM(proxy, src) ); 298 // SRGBTODO: Don't handle sRGB here, in anticipation of this code path being deleted.
299 sk_sp<SkSpecialImage> specialSrc(SkSpecialImage::internal_fromBM(proxy, src, nullptr));
299 if (!specialSrc) { 300 if (!specialSrc) {
300 return false; 301 return false;
301 } 302 }
302 303
303 sk_sp<SkSpecialImage> tmp(input->onFilterImage(specialSrc.get(), 304 sk_sp<SkSpecialImage> tmp(input->onFilterImage(specialSrc.get(),
304 this->mapContext(ctx), 305 this->mapContext(ctx),
305 offset)); 306 offset));
306 if (!tmp) { 307 if (!tmp) {
307 return false; 308 return false;
308 } 309 }
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 371
371 if (!src->internal_getBM(&srcBM)) { 372 if (!src->internal_getBM(&srcBM)) {
372 return nullptr; 373 return nullptr;
373 } 374 }
374 375
375 // This is the only valid call to the old filterImage path 376 // This is the only valid call to the old filterImage path
376 if (!this->filterImageDeprecated(src->internal_getProxy(), srcBM, ctx, &resu ltBM, offset)) { 377 if (!this->filterImageDeprecated(src->internal_getProxy(), srcBM, ctx, &resu ltBM, offset)) {
377 return nullptr; 378 return nullptr;
378 } 379 }
379 380
380 return SkSpecialImage::internal_fromBM(src->internal_getProxy(), resultBM); 381 return SkSpecialImage::internal_fromBM(src->internal_getProxy(), resultBM, & src->props());
381 } 382 }
382 383
383 bool SkImageFilter::canFilterImageGPU() const { 384 bool SkImageFilter::canFilterImageGPU() const {
384 return this->asFragmentProcessor(nullptr, nullptr, SkMatrix::I(), SkIRect()) ; 385 return this->asFragmentProcessor(nullptr, nullptr, SkMatrix::I(), SkIRect()) ;
385 } 386 }
386 387
387 bool SkImageFilter::filterImageGPUDeprecated(Proxy* proxy, const SkBitmap& src, const Context& ctx, 388 bool SkImageFilter::filterImageGPUDeprecated(Proxy* proxy, const SkBitmap& src, const Context& ctx,
388 SkBitmap* result, SkIPoint* offset) const { 389 SkBitmap* result, SkIPoint* offset) const {
389 #if SK_SUPPORT_GPU 390 #if SK_SUPPORT_GPU
390 SkBitmap input = src; 391 SkBitmap input = src;
(...skipping 20 matching lines...) Expand all
411 return false; 412 return false;
412 } 413 }
413 414
414 GrFragmentProcessor* fp; 415 GrFragmentProcessor* fp;
415 offset->fX = bounds.left(); 416 offset->fX = bounds.left();
416 offset->fY = bounds.top(); 417 offset->fY = bounds.top();
417 bounds.offset(-srcOffset); 418 bounds.offset(-srcOffset);
418 SkMatrix matrix(ctx.ctm()); 419 SkMatrix matrix(ctx.ctm());
419 matrix.postTranslate(SkIntToScalar(-bounds.left()), SkIntToScalar(-bounds.to p())); 420 matrix.postTranslate(SkIntToScalar(-bounds.left()), SkIntToScalar(-bounds.to p()));
420 GrPaint paint; 421 GrPaint paint;
422 // SRGBTODO: Don't handle sRGB here, in anticipation of this code path being deleted.
421 if (this->asFragmentProcessor(&fp, srcTexture, matrix, bounds)) { 423 if (this->asFragmentProcessor(&fp, srcTexture, matrix, bounds)) {
422 SkASSERT(fp); 424 SkASSERT(fp);
423 paint.addColorFragmentProcessor(fp)->unref(); 425 paint.addColorFragmentProcessor(fp)->unref();
424 paint.setPorterDuffXPFactory(SkXfermode::kSrc_Mode); 426 paint.setPorterDuffXPFactory(SkXfermode::kSrc_Mode);
425 427
426 SkAutoTUnref<GrDrawContext> drawContext(context->drawContext(dst->asRend erTarget())); 428 SkAutoTUnref<GrDrawContext> drawContext(context->drawContext(dst->asRend erTarget()));
427 if (drawContext) { 429 if (drawContext) {
428 SkRect srcRect = SkRect::Make(bounds); 430 SkRect srcRect = SkRect::Make(bounds);
429 SkRect dstRect = SkRect::MakeWH(srcRect.width(), srcRect.height()); 431 SkRect dstRect = SkRect::MakeWH(srcRect.width(), srcRect.height());
430 GrClip clip(dstRect); 432 GrClip clip(dstRect);
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 #if SK_SUPPORT_GPU 615 #if SK_SUPPORT_GPU
614 616
615 bool SkImageFilter::filterInputGPUDeprecated(int index, SkImageFilter::Proxy* pr oxy, 617 bool SkImageFilter::filterInputGPUDeprecated(int index, SkImageFilter::Proxy* pr oxy,
616 const SkBitmap& src, const Context& ctx, 618 const SkBitmap& src, const Context& ctx,
617 SkBitmap* result, SkIPoint* offset) const { 619 SkBitmap* result, SkIPoint* offset) const {
618 SkImageFilter* input = this->getInput(index); 620 SkImageFilter* input = this->getInput(index);
619 if (!input) { 621 if (!input) {
620 return true; 622 return true;
621 } 623 }
622 624
623 sk_sp<SkSpecialImage> specialSrc(SkSpecialImage::internal_fromBM(proxy, src) ); 625 // SRGBTODO: Don't handle sRGB here, in anticipation of this code path being deleted.
626 sk_sp<SkSpecialImage> specialSrc(SkSpecialImage::internal_fromBM(proxy, src, nullptr));
624 if (!specialSrc) { 627 if (!specialSrc) {
625 return false; 628 return false;
626 } 629 }
627 630
628 sk_sp<SkSpecialImage> tmp(input->onFilterImage(specialSrc.get(), 631 sk_sp<SkSpecialImage> tmp(input->onFilterImage(specialSrc.get(),
629 this->mapContext(ctx), 632 this->mapContext(ctx),
630 offset)); 633 offset));
631 if (!tmp) { 634 if (!tmp) {
632 return false; 635 return false;
633 } 636 }
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
821 dev = SkBitmapDevice::Create(cinfo.fInfo, surfaceProps); 824 dev = SkBitmapDevice::Create(cinfo.fInfo, surfaceProps);
822 } 825 }
823 return dev; 826 return dev;
824 } 827 }
825 828
826 bool SkImageFilter::DeviceProxy::filterImage(const SkImageFilter* filter, const SkBitmap& src, 829 bool SkImageFilter::DeviceProxy::filterImage(const SkImageFilter* filter, const SkBitmap& src,
827 const SkImageFilter::Context& ctx, 830 const SkImageFilter::Context& ctx,
828 SkBitmap* result, SkIPoint* offset) { 831 SkBitmap* result, SkIPoint* offset) {
829 return fDevice->filterImage(filter, src, ctx, result, offset); 832 return fDevice->filterImage(filter, src, ctx, result, offset);
830 } 833 }
OLDNEW
« no previous file with comments | « src/core/SkDevice.cpp ('k') | src/core/SkSpecialImage.h » ('j') | src/effects/SkImageSource.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698