Chromium Code Reviews| Index: src/gpu/batches/GrAAHairLinePathRenderer.cpp |
| diff --git a/src/gpu/batches/GrAAHairLinePathRenderer.cpp b/src/gpu/batches/GrAAHairLinePathRenderer.cpp |
| index 1f7407c5f633dc4731b10cf304051830c7524c0d..f514b7d8f0c57ca5cfcc57916a57be269bb613c3 100644 |
| --- a/src/gpu/batches/GrAAHairLinePathRenderer.cpp |
| +++ b/src/gpu/batches/GrAAHairLinePathRenderer.cpp |
| @@ -676,15 +676,21 @@ class AAHairlineBatch : public GrVertexBatch { |
| public: |
| DEFINE_BATCH_CLASS_ID |
| - struct Geometry { |
| - GrColor fColor; |
| - uint8_t fCoverage; |
| - SkMatrix fViewMatrix; |
| - SkPath fPath; |
| - SkIRect fDevClipBounds; |
| - }; |
| + AAHairlineBatch(GrColor color, |
| + uint8_t coverage, |
| + SkMatrix viewMatrix, |
| + SkPath path, |
|
bsalomon
2016/06/29 20:56:28
Will make this const SkPath&
|
| + SkIRect devClipBounds) : INHERITED(ClassID()) { |
| + fGeoData.emplace_back(Geometry{color, coverage, viewMatrix, path, devClipBounds}); |
| + |
| + // compute bounds |
| + fBounds = path.getBounds(); |
| + viewMatrix.mapRect(&fBounds); |
| - static GrDrawBatch* Create(const Geometry& geometry) { return new AAHairlineBatch(geometry); } |
| + // This is b.c. hairlines are notionally infinitely thin so without expansion |
| + // two overlapping lines could be reordered even though they hit the same pixels. |
| + fBounds.outset(0.5f, 0.5f); |
| + } |
| const char* name() const override { return "AAHairlineBatch"; } |
| @@ -712,26 +718,12 @@ private: |
| fBatch.fCoverage = fGeoData[0].fCoverage; |
| } |
| - SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } |
| - |
| void onPrepareDraws(Target*) const override; |
| typedef SkTArray<SkPoint, true> PtArray; |
| typedef SkTArray<int, true> IntArray; |
| typedef SkTArray<float, true> FloatArray; |
| - AAHairlineBatch(const Geometry& geometry) : INHERITED(ClassID()) { |
| - fGeoData.push_back(geometry); |
| - |
| - // compute bounds |
| - fBounds = geometry.fPath.getBounds(); |
| - geometry.fViewMatrix.mapRect(&fBounds); |
| - |
| - // This is b.c. hairlines are notionally infinitely thin so without expansion |
| - // two overlapping lines could be reordered even though they hit the same pixels. |
| - fBounds.outset(0.5f, 0.5f); |
| - } |
| - |
| bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { |
| AAHairlineBatch* that = t->cast<AAHairlineBatch>(); |
| @@ -766,7 +758,7 @@ private: |
| return false; |
| } |
| - fGeoData.push_back_n(that->geoData()->count(), that->geoData()->begin()); |
| + fGeoData.push_back_n(that->fGeoData.count(), that->fGeoData.begin()); |
| this->joinBounds(that->bounds()); |
| return true; |
| } |
| @@ -777,6 +769,15 @@ private: |
| const SkMatrix& viewMatrix() const { return fGeoData[0].fViewMatrix; } |
| bool coverageIgnored() const { return fBatch.fCoverageIgnored; } |
| + |
| + struct Geometry { |
| + GrColor fColor; |
| + uint8_t fCoverage; |
| + SkMatrix fViewMatrix; |
| + SkPath fPath; |
| + SkIRect fDevClipBounds; |
| + }; |
| + |
| struct BatchTracker { |
| GrColor fColor; |
| uint8_t fCoverage; |
| @@ -953,14 +954,7 @@ static GrDrawBatch* create_hairline_batch(GrColor color, |
| newCoverage = SkScalarRoundToInt(hairlineCoverage * 0xff); |
| } |
| - AAHairlineBatch::Geometry geometry; |
| - geometry.fColor = color; |
| - geometry.fCoverage = newCoverage; |
| - geometry.fViewMatrix = viewMatrix; |
| - geometry.fPath = path; |
| - geometry.fDevClipBounds = devClipBounds; |
| - |
| - return AAHairlineBatch::Create(geometry); |
| + return new AAHairlineBatch(color, newCoverage, viewMatrix, path, devClipBounds); |
| } |
| bool GrAAHairLinePathRenderer::onDrawPath(const DrawPathArgs& args) { |