More bounds fixes for StrokeRect and DefaultPath when using MSAA for non-aa.
Change-Id: Ia9c2a47675eac8f3ac1220c0e1089766aa141fc1
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/245364
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
diff --git a/src/gpu/ops/GrStrokeRectOp.cpp b/src/gpu/ops/GrStrokeRectOp.cpp
index 4da6452..439a7c7 100644
--- a/src/gpu/ops/GrStrokeRectOp.cpp
+++ b/src/gpu/ops/GrStrokeRectOp.cpp
@@ -140,12 +140,13 @@
fRect.sort();
fStrokeWidth = stroke.getWidth();
- SkScalar rad = fStrokeWidth ? SkScalarHalf(fStrokeWidth) : 0.5f;
+ SkScalar rad = SkScalarHalf(fStrokeWidth);
SkRect bounds = rect;
bounds.outset(rad, rad);
// If our caller snaps to pixel centers then we have to round out the bounds
if (inputFlags & Helper::InputFlags::kSnapVerticesToPixelCenters) {
+ SkASSERT(!fStrokeWidth || aaType == GrAAType::kNone);
viewMatrix.mapRect(&bounds);
// We want to be consistent with how we snap non-aa lines. To match what we do in
// GrGLSLVertexShaderBuilder, we first floor all the vertex values and then add half a
@@ -155,9 +156,11 @@
SkScalarFloorToScalar(bounds.fRight),
SkScalarFloorToScalar(bounds.fBottom));
bounds.offset(0.5f, 0.5f);
- this->setBounds(bounds, HasAABloat::kNo, IsZeroArea::kNo);
+ this->setBounds(bounds, HasAABloat::kNo, IsHairline::kNo);
} else {
- this->setTransformedBounds(bounds, fViewMatrix, HasAABloat::kNo, IsZeroArea::kNo);
+ HasAABloat aaBloat = (aaType == GrAAType::kNone) ? HasAABloat ::kNo : HasAABloat::kYes;
+ this->setTransformedBounds(bounds, fViewMatrix, aaBloat,
+ fStrokeWidth ? IsHairline::kNo : IsHairline::kYes);
}
}
@@ -343,7 +346,7 @@
SkASSERT(!devInside.isEmpty());
fRects.emplace_back(RectInfo{color, devOutside, devOutside, devInside, false});
- this->setBounds(devOutside, HasAABloat::kYes, IsZeroArea::kNo);
+ this->setBounds(devOutside, HasAABloat::kYes, IsHairline::kNo);
fMiterStroke = true;
}
@@ -372,13 +375,13 @@
&info.fDegenerate, viewMatrix, rect, stroke.getWidth(), isMiter);
info.fColor = color;
if (isMiter) {
- this->setBounds(info.fDevOutside, HasAABloat::kYes, IsZeroArea::kNo);
+ this->setBounds(info.fDevOutside, HasAABloat::kYes, IsHairline::kNo);
} else {
// The outer polygon of the bevel stroke is an octagon specified by the points of a
// pair of overlapping rectangles where one is wide and the other is narrow.
SkRect bounds = info.fDevOutside;
bounds.joinPossiblyEmptyRect(info.fDevOutsideAssist);
- this->setBounds(bounds, HasAABloat::kYes, IsZeroArea::kNo);
+ this->setBounds(bounds, HasAABloat::kYes, IsHairline::kNo);
}
}