Remove GrTriangulator::fIsLinear

I think it makes sense for the class functions to not have internal side
effects. Meaning, you can call pathToPolys and polysToTriangles all you
want without worrying about internal state.

Bug: skia:10419
Change-Id: I5e2136719bbf65a6a8e4c032c1c1326f0a9a98c3
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/356496
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
diff --git a/src/gpu/GrAATriangulator.h b/src/gpu/GrAATriangulator.h
index 4d240d0..76af935 100644
--- a/src/gpu/GrAATriangulator.h
+++ b/src/gpu/GrAATriangulator.h
@@ -18,7 +18,8 @@
         GrAATriangulator aaTriangulator(path);
         aaTriangulator.fRoundVerticesToQuarterPixel = true;
         aaTriangulator.fEmitCoverage = true;
-        Poly* polys = aaTriangulator.pathToPolys(tolerance, clipBounds);
+        bool isLinear;
+        Poly* polys = aaTriangulator.pathToPolys(tolerance, clipBounds, &isLinear);
         return aaTriangulator.polysToAATriangles(polys, vertexAllocator);
     }
 
diff --git a/src/gpu/GrTriangulator.cpp b/src/gpu/GrTriangulator.cpp
index 6a016f4..8deb091 100644
--- a/src/gpu/GrTriangulator.cpp
+++ b/src/gpu/GrTriangulator.cpp
@@ -401,10 +401,10 @@
 // Stage 1: convert the input path to a set of linear contours (linked list of Vertices).
 
 void GrTriangulator::pathToContours(float tolerance, const SkRect& clipBounds,
-                                    VertexList* contours) {
+                                    VertexList* contours, bool* isLinear) {
     SkScalar toleranceSqd = tolerance * tolerance;
     SkPoint pts[4];
-    fIsLinear = true;
+    *isLinear = true;
     VertexList* contour = contours;
     SkPath::Iter iter(fPath, false);
     if (fPath.isInverseFillType()) {
@@ -420,7 +420,7 @@
     while ((verb = iter.next(pts)) != SkPath::kDone_Verb) {
         switch (verb) {
             case SkPath::kConic_Verb: {
-                fIsLinear = false;
+                *isLinear = false;
                 if (toleranceSqd == 0) {
                     this->appendPointToContour(pts[2], contour);
                     break;
@@ -444,7 +444,7 @@
                 break;
             }
             case SkPath::kQuad_Verb: {
-                fIsLinear = false;
+                *isLinear = false;
                 if (toleranceSqd == 0) {
                     this->appendPointToContour(pts[2], contour);
                     break;
@@ -453,7 +453,7 @@
                 break;
             }
             case SkPath::kCubic_Verb: {
-                fIsLinear = false;
+                *isLinear = false;
                 if (toleranceSqd == 0) {
                     this->appendPointToContour(pts[3], contour);
                     break;
@@ -1434,10 +1434,10 @@
     return contourCnt;
 }
 
-Poly* GrTriangulator::pathToPolys(float tolerance, const SkRect& clipBounds) {
+Poly* GrTriangulator::pathToPolys(float tolerance, const SkRect& clipBounds, bool* isLinear) {
     int contourCnt = get_contour_count(fPath, tolerance);
     if (contourCnt <= 0) {
-        fIsLinear = true;
+        *isLinear = true;
         return nullptr;
     }
 
@@ -1446,7 +1446,7 @@
     }
     std::unique_ptr<VertexList[]> contours(new VertexList[contourCnt]);
 
-    this->pathToContours(tolerance, clipBounds, contours.get());
+    this->pathToContours(tolerance, clipBounds, contours.get(), isLinear);
     return this->contoursToPolys(contours.get(), contourCnt);
 }
 
@@ -1492,7 +1492,8 @@
 int GrTriangulator::PathToVertices(const SkPath& path, SkScalar tolerance, const SkRect& clipBounds,
                                    WindingVertex** verts) {
     GrTriangulator triangulator(path);
-    Poly* polys = triangulator.pathToPolys(tolerance, clipBounds);
+    bool isLinear;
+    Poly* polys = triangulator.pathToPolys(tolerance, clipBounds, &isLinear);
     int64_t count64 = CountPoints(polys, path.getFillType());
     if (0 == count64 || count64 > SK_MaxS32) {
         *verts = nullptr;
diff --git a/src/gpu/GrTriangulator.h b/src/gpu/GrTriangulator.h
index 5475c60..ea34312 100644
--- a/src/gpu/GrTriangulator.h
+++ b/src/gpu/GrTriangulator.h
@@ -28,9 +28,8 @@
     static int PathToTriangles(const SkPath& path, SkScalar tolerance, const SkRect& clipBounds,
                                GrEagerVertexAllocator* vertexAllocator, bool* isLinear) {
         GrTriangulator triangulator(path);
-        Poly* polys = triangulator.pathToPolys(tolerance, clipBounds);
+        Poly* polys = triangulator.pathToPolys(tolerance, clipBounds, isLinear);
         int count = triangulator.polysToTriangles(polys, vertexAllocator);
-        *isLinear = triangulator.fIsLinear;
         return count;
     }
 
@@ -76,9 +75,8 @@
         GrTriangulator triangulator(path);
         triangulator.fCullCollinearVertices = false;
         triangulator.fBreadcrumbTriangles = breadcrumbTriangles;
-        Poly* polys = triangulator.pathToPolys(0, SkRect::MakeEmpty());
+        Poly* polys = triangulator.pathToPolys(0, SkRect::MakeEmpty(), isLinear);
         int count = triangulator.polysToTriangles(polys, vertexAllocator);
-        *isLinear = triangulator.fIsLinear;
         return count;
     }
 
@@ -88,9 +86,8 @@
         GrTriangulator triangulator(path);
         triangulator.fCullCollinearVertices = false;
         triangulator.fDisallowSelfIntersection = true;
-        Poly* polys = triangulator.pathToPolys(0, SkRect::MakeEmpty());
+        Poly* polys = triangulator.pathToPolys(0, SkRect::MakeEmpty(), isLinear);
         int count = triangulator.polysToTriangles(polys, vertexAllocator);
-        *isLinear = triangulator.fIsLinear;
         return count;
     }
 
@@ -130,7 +127,8 @@
     // There are six stages to the basic algorithm:
     //
     // 1) Linearize the path contours into piecewise linear segments:
-    void pathToContours(float tolerance, const SkRect& clipBounds, VertexList* contours);
+    void pathToContours(float tolerance, const SkRect& clipBounds, VertexList* contours,
+                        bool* isLinear);
 
     // 2) Build a mesh of edges connecting the vertices:
     void contoursToMesh(VertexList* contours, int contourCnt, VertexList* mesh, const Comparator&);
@@ -235,14 +233,13 @@
     bool mergeCoincidentVertices(VertexList* mesh, const Comparator&);
     void buildEdges(VertexList* contours, int contourCnt, VertexList* mesh, const Comparator&);
     Poly* contoursToPolys(VertexList* contours, int contourCnt);
-    Poly* pathToPolys(float tolerance, const SkRect& clipBounds);
+    Poly* pathToPolys(float tolerance, const SkRect& clipBounds, bool* isLinear);
     static int64_t CountPoints(Poly* polys, SkPathFillType overrideFillType);
     int polysToTriangles(Poly*, GrEagerVertexAllocator*);
 
     constexpr static int kArenaChunkSize = 16 * 1024;
     SkArenaAlloc fAlloc{kArenaChunkSize};
     const SkPath fPath;
-    bool fIsLinear = false;
 
     // Internal control knobs.
     bool fRoundVerticesToQuarterPixel = false;