Can't correctly call computeFastBounds on maskfilter w/ device geo
maskfilter's computeFastBounds assumes the passed-in geometry bounds is in src space, but in drawDevPath the bounds is in device space, so this call can return meaningless answers. Skip this whole block of code, since filterPath itself performs culling. Bug: skia: Change-Id: Ia668d8b692ce77332fa16908e9b0cf774c189e11 Reviewed-on: https://skia-review.googlesource.com/104520 Reviewed-by: Florin Malita <fmalita@chromium.org> Commit-Queue: Mike Reed <reed@google.com>
This commit is contained in:
parent
703d9c47a8
commit
953c194038
@ -952,27 +952,6 @@ SkScalar SkDraw::ComputeResScaleForStroking(const SkMatrix& matrix) {
|
||||
|
||||
void SkDraw::drawDevPath(const SkPath& devPath, const SkPaint& paint, bool drawCoverage,
|
||||
SkBlitter* customBlitter, bool doFill) const {
|
||||
// Do a conservative quick-reject test, since a looper or other modifier may have moved us
|
||||
// out of range.
|
||||
if (!devPath.isInverseFillType()) {
|
||||
// If we're a H or V line, our bounds will be empty. So we bloat here just so we don't
|
||||
// appear empty to the intersects call. This also gives us slop in case we're antialiasing
|
||||
SkRect pathBounds = devPath.getBounds().makeOutset(1, 1);
|
||||
|
||||
if (paint.getMaskFilter()) {
|
||||
as_MFB(paint.getMaskFilter())->computeFastBounds(pathBounds, &pathBounds);
|
||||
|
||||
// Need to outset the path to work-around a bug in blurmaskfilter. When that is fixed
|
||||
// we can remove this hack. See skbug.com/5542
|
||||
pathBounds.outset(7, 7);
|
||||
}
|
||||
|
||||
// Now compare against the clip's bounds
|
||||
if (!SkRect::Make(fRC->getBounds()).intersects(pathBounds)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
SkBlitter* blitter = nullptr;
|
||||
SkAutoBlitterChoose blitterStorage;
|
||||
if (nullptr == customBlitter) {
|
||||
|
Loading…
Reference in New Issue
Block a user