aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/batches/GrRectBatchFactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/batches/GrRectBatchFactory.cpp')
-rw-r--r--src/gpu/batches/GrRectBatchFactory.cpp36
1 files changed, 19 insertions, 17 deletions
diff --git a/src/gpu/batches/GrRectBatchFactory.cpp b/src/gpu/batches/GrRectBatchFactory.cpp
index eed18ad419..f34a8c058a 100644
--- a/src/gpu/batches/GrRectBatchFactory.cpp
+++ b/src/gpu/batches/GrRectBatchFactory.cpp
@@ -33,13 +33,6 @@ GrDrawBatch* CreateAAStroke(GrColor color,
const SkScalar rx = SkScalarMul(dx, SK_ScalarHalf);
const SkScalar ry = SkScalarMul(dy, SK_ScalarHalf);
- SkScalar spare;
- {
- SkScalar w = devRect.width() - dx;
- SkScalar h = devRect.height() - dy;
- spare = SkTMin(w, h);
- }
-
SkRect devOutside(devRect);
devOutside.outset(rx, ry);
@@ -51,13 +44,25 @@ GrDrawBatch* CreateAAStroke(GrColor color,
miterStroke = false;
}
- if (spare <= 0 && miterStroke) {
- return CreateAAFill(color, viewMatrix, devOutside, devOutside);
- }
-
SkRect devInside(devRect);
devInside.inset(rx, ry);
+ // If we have a degenerate stroking rect(ie the stroke is larger than inner rect) then we
+ // make a degenerate inside rect to avoid double hitting. We will also jam all of the points
+ // together when we render these rects.
+ SkScalar spare;
+ {
+ SkScalar w = devRect.width() - dx;
+ SkScalar h = devRect.height() - dy;
+ spare = SkTMin(w, h);
+ }
+
+ bool degenerate = spare <= 0;
+ if (degenerate) {
+ devInside.fLeft = devInside.fRight = devRect.centerX();
+ devInside.fTop = devInside.fBottom = devRect.centerY();
+ }
+
SkRect devOutsideAssist(devRect);
// For bevel-stroke, use 2 SkRect instances(devOutside and devOutsideAssist)
@@ -69,7 +74,7 @@ GrDrawBatch* CreateAAStroke(GrColor color,
}
return GrAAStrokeRectBatch::Create(color, viewMatrix, devOutside, devOutsideAssist, devInside,
- miterStroke);
+ miterStroke, degenerate);
}
GrDrawBatch* CreateAAFillNestedRects(GrColor color,
@@ -82,11 +87,8 @@ GrDrawBatch* CreateAAFillNestedRects(GrColor color,
viewMatrix.mapRect(&devOutside, rects[0]);
viewMatrix.mapRect(&devInside, rects[1]);
- if (devInside.isEmpty()) {
- return CreateAAFill(color, viewMatrix, devOutside, devOutside);
- }
-
- return GrAAStrokeRectBatch::Create(color, viewMatrix, devOutside, devOutside, devInside, true);
+ return GrAAStrokeRectBatch::Create(color, viewMatrix, devOutside, devOutside, devInside, true,
+ devInside.isEmpty());
}
};