Index: src/gpu/batches/GrAAConvexPathRenderer.cpp |
diff --git a/src/gpu/batches/GrAAConvexPathRenderer.cpp b/src/gpu/batches/GrAAConvexPathRenderer.cpp |
index aee18b720a6a2ef03825f089ee4236dacd2ab92a..90f2e1df82a5e2f32184a05894e1dd6946771cc7 100644 |
--- a/src/gpu/batches/GrAAConvexPathRenderer.cpp |
+++ b/src/gpu/batches/GrAAConvexPathRenderer.cpp |
@@ -777,7 +777,7 @@ private: |
fBatch.fCanTweakAlphaForCoverage = opt.canTweakAlphaForCoverage(); |
} |
- void prepareLinesOnlyDraws(Target* target) { |
+ void prepareLinesOnlyDraws(Target* target) const { |
bool canTweakAlphaForCoverage = this->canTweakAlphaForCoverage(); |
// Setup GrGeometryProcessor |
@@ -805,7 +805,7 @@ private: |
for (int i = 0; i < instanceCount; i++) { |
tess.rewind(); |
- Geometry& args = fGeoData[i]; |
+ const Geometry& args = fGeoData[i]; |
if (!tess.tessellate(args.fViewMatrix, args.fPath)) { |
continue; |
@@ -841,7 +841,7 @@ private: |
} |
} |
- void onPrepareDraws(Target* target) override { |
+ void onPrepareDraws(Target* target) const override { |
#ifndef SK_IGNORE_LINEONLY_AA_CONVEX_PATH_OPTS |
if (this->linesOnly()) { |
this->prepareLinesOnlyDraws(target); |
@@ -865,15 +865,21 @@ private: |
// TODO generate all segments for all paths and use one vertex buffer |
for (int i = 0; i < instanceCount; i++) { |
- Geometry& args = fGeoData[i]; |
+ const Geometry& args = fGeoData[i]; |
// We use the fact that SkPath::transform path does subdivision based on |
// perspective. Otherwise, we apply the view matrix when copying to the |
// segment representation. |
const SkMatrix* viewMatrix = &args.fViewMatrix; |
+ |
+ // We avoid initializing the path unless we have to |
+ const SkPath* pathPtr = &args.fPath; |
+ SkTLazy<SkPath> tmpPath; |
if (viewMatrix->hasPerspective()) { |
- args.fPath.transform(*viewMatrix); |
+ SkPath* tmpPathPtr = tmpPath.init(*pathPtr); |
robertphillips
2015/11/30 19:52:40
Should we set the volatile bit on the new path ?
|
+ tmpPathPtr->transform(*viewMatrix); |
viewMatrix = &SkMatrix::I(); |
+ pathPtr = tmpPathPtr; |
} |
int vertexCount; |
@@ -885,7 +891,7 @@ private: |
SkSTArray<kPreallocSegmentCnt, Segment, true> segments; |
SkPoint fanPt; |
- if (!get_segments(args.fPath, *viewMatrix, &segments, &fanPt, &vertexCount, |
+ if (!get_segments(*pathPtr, *viewMatrix, &segments, &fanPt, &vertexCount, |
&indexCount)) { |
continue; |
} |