Index: src/core/SkCanvas.cpp |
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp |
index a47bd89c0507acad23ca7512279813ddd4a8697f..b560def0e940feb0906ae7a5d823b8c6e9aba1f4 100644 |
--- a/src/core/SkCanvas.cpp |
+++ b/src/core/SkCanvas.cpp |
@@ -917,21 +917,13 @@ void SkCanvas::internalSaveLayer(const SkRect* bounds, const SkPaint* paint, Sav |
return; |
} |
- // Kill the imagefilter if our device doesn't allow it |
- SkLazyPaint lazyP; |
- if (paint && paint->getImageFilter()) { |
- if (!this->getTopDevice()->allowImageFilter(paint->getImageFilter())) { |
- if (justForImageFilter) { |
- // early exit if the layer was just for the imageFilter |
- return; |
- } |
- SkPaint* p = lazyP.set(*paint); |
- p->setImageFilter(NULL); |
- paint = p; |
+ bool isOpaque = !SkToBool(flags & kHasAlphaLayer_SaveFlag); |
+ if (isOpaque && paint) { |
+ // TODO: perhaps add a query to filters so we might preserve opaqueness... |
+ if (paint->getImageFilter() || paint->getColorFilter()) { |
+ isOpaque = false; |
} |
} |
- |
- bool isOpaque = !SkToBool(flags & kHasAlphaLayer_SaveFlag); |
SkImageInfo info = SkImageInfo::MakeN32(ir.width(), ir.height(), |
isOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType); |
@@ -941,12 +933,15 @@ void SkCanvas::internalSaveLayer(const SkRect* bounds, const SkPaint* paint, Sav |
return; |
} |
- SkBaseDevice::Usage usage = SkBaseDevice::kSaveLayer_Usage; |
+ SkBaseDevice::TileUsage usage = SkBaseDevice::kNever_TileUsage; |
robertphillips
2015/03/10 13:49:25
What's up with this #if'ed out code ?
reed1
2015/03/13 14:07:08
Done.
|
+#if 0 |
+ // this seems needed for current GMs, but makes us draw slower on the GPU |
if (paint && paint->getImageFilter()) { |
- usage = SkBaseDevice::kImageFilter_Usage; |
+ usage = SkBaseDevice::kPossible_TileUsage; |
} |
- device = device->onCreateCompatibleDevice(SkBaseDevice::CreateInfo(info, usage, |
- fProps.pixelGeometry())); |
+#endif |
+ device = device->onCreateDevice(SkBaseDevice::CreateInfo(info, usage, fProps.pixelGeometry()), |
+ paint); |
if (NULL == device) { |
SkErrorInternals::SetError( kInternalError_SkError, |
"Unable to create device for layer."); |