aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/SkGr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/SkGr.cpp')
-rw-r--r--src/gpu/SkGr.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index e4dc467e7f..df65e451fe 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -489,10 +489,15 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context,
}
}
- SkXfermode* mode = skPaint.getXfermode();
- GrXPFactory* xpFactory = nullptr;
- SkXfermode::AsXPFactory(mode, &xpFactory);
- SkSafeUnref(grPaint->setXPFactory(xpFactory));
+ // When the xfermode is null on the SkPaint (meaning kSrcOver) we need the XPFactory field on
+ // the GrPaint to also be null (also kSrcOver).
+ SkASSERT(!grPaint->getXPFactory());
+ SkXfermode* xfermode = skPaint.getXfermode();
+ if (xfermode) {
+ // SafeUnref in case a new xfermode is added that returns null.
+ // In such cases we will fall back to kSrcOver_Mode.
+ SkSafeUnref(grPaint->setXPFactory(xfermode->asXPFactory()));
+ }
#ifndef SK_IGNORE_GPU_DITHER
if (skPaint.isDither() && grPaint->numColorFragmentProcessors() > 0) {