diff options
Diffstat (limited to 'src/gpu/batches/GrRectBatchFactory.cpp')
-rw-r--r-- | src/gpu/batches/GrRectBatchFactory.cpp | 36 |
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()); } }; |