Index: src/gpu/GrSWMaskHelper.cpp |
diff --git a/src/gpu/GrSWMaskHelper.cpp b/src/gpu/GrSWMaskHelper.cpp |
index 5fb944bac4bcf20b2fc645079ea8c6a0e8ee00ae..eefc951e7e4482c58103389fe113a10e5a1ddf8f 100644 |
--- a/src/gpu/GrSWMaskHelper.cpp |
+++ b/src/gpu/GrSWMaskHelper.cpp |
@@ -73,16 +73,16 @@ void GrSWMaskHelper::draw(const SkPath& path, const SkStrokeRec& stroke, SkRegio |
paint.setStrokeWidth(stroke.getWidth()); |
} |
} |
- |
- SkXfermode* mode = SkXfermode::Create(op_to_mode(op)); |
- |
- paint.setXfermode(mode); |
paint.setAntiAlias(antiAlias); |
- paint.setColor(SkColorSetARGB(alpha, alpha, alpha, alpha)); |
- fDraw.drawPath(path, paint); |
- |
- SkSafeUnref(mode); |
+ if (SkRegion::kReplace_Op == op && 0xFF == alpha) { |
+ SkASSERT(0xFF == paint.getAlpha()); |
+ fDraw.drawPathCoverage(path, paint); |
+ } else { |
+ paint.setXfermodeMode(op_to_mode(op)); |
+ paint.setColor(SkColorSetARGB(alpha, alpha, alpha, alpha)); |
+ fDraw.drawPath(path, paint); |
+ } |
} |
bool GrSWMaskHelper::init(const SkIRect& resultBounds, |