Index: src/gpu/GrOvalRenderer.cpp |
diff --git a/src/gpu/GrOvalRenderer.cpp b/src/gpu/GrOvalRenderer.cpp |
index f5dcfcb0f5ad51c10b81ddfa5e52254b8e5627d7..aec9b76ba85f986236a0382fcb451f84beb5e2c2 100644 |
--- a/src/gpu/GrOvalRenderer.cpp |
+++ b/src/gpu/GrOvalRenderer.cpp |
@@ -572,7 +572,12 @@ public: |
SkRect::MakeLTRB(center.fX - outerRadius, center.fY - outerRadius, |
center.fX + outerRadius, center.fY + outerRadius) |
}); |
- this->setBounds(fGeoData.back().fDevBounds); |
+ // Use the original radius and stroke radius for the bounds so that it does not include the |
+ // AA bloat. |
+ radius += halfWidth; |
+ this->setBounds({center.fX - radius, center.fY - radius, |
+ center.fX + radius, center.fY + radius}, |
+ HasAABloat::kYes, IsZeroArea::kNo); |
fStroked = isStrokeOnly && innerRadius > 0; |
} |
@@ -685,7 +690,7 @@ private: |
} |
fGeoData.push_back_n(that->fGeoData.count(), that->fGeoData.begin()); |
- this->joinBounds(that->bounds()); |
+ this->joinBounds(*that); |
return true; |
} |
@@ -777,12 +782,13 @@ public: |
center.fX + xRadius, center.fY + yRadius) |
}); |
+ batch->setBounds(batch->fGeoData.back().fDevBounds, HasAABloat::kYes, IsZeroArea::kNo); |
+ |
// Outset bounds to include half-pixel width antialiasing. |
batch->fGeoData[0].fDevBounds.outset(SK_ScalarHalf, SK_ScalarHalf); |
batch->fStroked = isStrokeOnly && innerXRadius > 0 && innerYRadius > 0; |
batch->fViewMatrixIfUsingLocalCoords = viewMatrix; |
- batch->setBounds(batch->fGeoData.back().fDevBounds); |
return batch; |
} |
@@ -894,7 +900,7 @@ private: |
} |
fGeoData.push_back_n(that->fGeoData.count(), that->fGeoData.begin()); |
- this->joinBounds(that->bounds()); |
+ this->joinBounds(*that); |
return true; |
} |
@@ -993,9 +999,8 @@ public: |
SkRect::MakeLTRB(center.fX - xRadius - geoDx, center.fY - yRadius - geoDy, |
center.fX + xRadius + geoDx, center.fY + yRadius + geoDy) |
}); |
- SkRect devBounds = batch->fGeoData.back().fBounds; |
- viewMatrix.mapRect(&devBounds); |
- batch->setBounds(devBounds); |
+ batch->setTransformedBounds(batch->fGeoData[0].fBounds, viewMatrix, HasAABloat::kYes, |
+ IsZeroArea::kNo); |
return batch; |
} |
@@ -1092,7 +1097,7 @@ private: |
} |
fGeoData.push_back_n(that->fGeoData.count(), that->fGeoData.begin()); |
- this->joinBounds(that->bounds()); |
+ this->joinBounds(*that); |
return true; |
} |
@@ -1202,11 +1207,12 @@ public: |
outerRadius += SK_ScalarHalf; |
innerRadius -= SK_ScalarHalf; |
- // Expand the rect so all the pixels will be captured. |
+ this->setBounds(bounds, HasAABloat::kYes, IsZeroArea::kNo); |
+ |
+ // Expand the rect for aa to generate correct vertices. |
bounds.outset(SK_ScalarHalf, SK_ScalarHalf); |
fGeoData.emplace_back(Geometry { color, innerRadius, outerRadius, bounds }); |
- this->setBounds(bounds); |
} |
const char* name() const override { return "RRectCircleBatch"; } |
@@ -1324,7 +1330,7 @@ private: |
} |
fGeoData.push_back_n(that->fGeoData.count(), that->fGeoData.begin()); |
- this->joinBounds(that->bounds()); |
+ this->joinBounds(*that); |
return true; |
} |
@@ -1394,15 +1400,14 @@ public: |
bounds.outset(devStrokeWidths.fX, devStrokeWidths.fY); |
} |
- // Expand the rect so all the pixels will be captured. |
- bounds.outset(SK_ScalarHalf, SK_ScalarHalf); |
- |
RRectEllipseRendererBatch* batch = new RRectEllipseRendererBatch(); |
batch->fStroked = stroked; |
batch->fViewMatrixIfUsingLocalCoords = viewMatrix; |
+ batch->setBounds(bounds, HasAABloat::kYes, IsZeroArea::kNo); |
+ // Expand the rect for aa in order to generate the correct vertices. |
+ bounds.outset(SK_ScalarHalf, SK_ScalarHalf); |
batch->fGeoData.emplace_back( |
Geometry {color, devXRadius, devYRadius, innerXRadius, innerYRadius, bounds}); |
- batch->setBounds(bounds); |
return batch; |
} |
@@ -1534,7 +1539,7 @@ private: |
} |
fGeoData.push_back_n(that->fGeoData.count(), that->fGeoData.begin()); |
- this->joinBounds(that->bounds()); |
+ this->joinBounds(*that); |
return true; |
} |