| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2010 Google Inc. | 2 * Copyright 2010 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 | 8 |
| 9 #include "SkGr.h" | 9 #include "SkGr.h" |
| 10 | 10 |
| (...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 SkAutoTUnref<const GrFragmentProcessor> cfFP( | 482 SkAutoTUnref<const GrFragmentProcessor> cfFP( |
| 483 colorFilter->asFragmentProcessor(context)); | 483 colorFilter->asFragmentProcessor(context)); |
| 484 if (cfFP) { | 484 if (cfFP) { |
| 485 grPaint->addColorFragmentProcessor(cfFP); | 485 grPaint->addColorFragmentProcessor(cfFP); |
| 486 } else { | 486 } else { |
| 487 return false; | 487 return false; |
| 488 } | 488 } |
| 489 } | 489 } |
| 490 } | 490 } |
| 491 | 491 |
| 492 SkXfermode* mode = skPaint.getXfermode(); | 492 // When the xfermode is null on the SkPaint (meaning kSrcOver) we need the X
PFactory field on |
| 493 GrXPFactory* xpFactory = nullptr; | 493 // the GrPaint to also be null (also kSrcOver). |
| 494 SkXfermode::AsXPFactory(mode, &xpFactory); | 494 SkASSERT(!grPaint->getXPFactory()); |
| 495 SkSafeUnref(grPaint->setXPFactory(xpFactory)); | 495 SkXfermode* xfermode = skPaint.getXfermode(); |
| 496 if (xfermode) { |
| 497 // SafeUnref in case a new xfermode is added that returns null. |
| 498 // In such cases we will fall back to kSrcOver_Mode. |
| 499 SkSafeUnref(grPaint->setXPFactory(xfermode->asXPFactory())); |
| 500 } |
| 496 | 501 |
| 497 #ifndef SK_IGNORE_GPU_DITHER | 502 #ifndef SK_IGNORE_GPU_DITHER |
| 498 if (skPaint.isDither() && grPaint->numColorFragmentProcessors() > 0) { | 503 if (skPaint.isDither() && grPaint->numColorFragmentProcessors() > 0) { |
| 499 grPaint->addColorFragmentProcessor(GrDitherEffect::Create())->unref(); | 504 grPaint->addColorFragmentProcessor(GrDitherEffect::Create())->unref(); |
| 500 } | 505 } |
| 501 #endif | 506 #endif |
| 502 return true; | 507 return true; |
| 503 } | 508 } |
| 504 | 509 |
| 505 bool SkPaintToGrPaint(GrContext* context, const SkPaint& skPaint, const SkMatrix
& viewM, | 510 bool SkPaintToGrPaint(GrContext* context, const SkPaint& skPaint, const SkMatrix
& viewM, |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 629 SkErrorInternals::SetError( kInvalidPaint_SkError, | 634 SkErrorInternals::SetError( kInvalidPaint_SkError, |
| 630 "Sorry, I don't understand the filtering
" | 635 "Sorry, I don't understand the filtering
" |
| 631 "mode you asked for. Falling back to " | 636 "mode you asked for. Falling back to " |
| 632 "MIPMaps."); | 637 "MIPMaps."); |
| 633 textureFilterMode = GrTextureParams::kMipMap_FilterMode; | 638 textureFilterMode = GrTextureParams::kMipMap_FilterMode; |
| 634 break; | 639 break; |
| 635 | 640 |
| 636 } | 641 } |
| 637 return textureFilterMode; | 642 return textureFilterMode; |
| 638 } | 643 } |
| OLD | NEW |