Revert "GrTessellator: handle three consecutive collinear edges."
This reverts commit 26bb0e66f28c41cb1e8e39f00d848997fd33d97c.
Reason for revert: segfaulty
Here's a log with a stacktrace:
https://chromium-swarm.appspot.com/task?id=3e658f7aa40dbb10&refresh=10
Original change's description:
> GrTessellator: handle three consecutive collinear edges.
>
> In some cases, splitting may produce three consecutive edges which
> are collinear. The first one was being merged out, causing the third
> one to be missed.
>
> The fix is to switch the arguments to merge_edges_*, ensuring that the
> second parameter (the destination edge) is never merged out.
>
> Bug: 851409.
> Change-Id: I70fbbc506e97a26b259c1443b6d1787adec0f9b0
> Reviewed-on: https://skia-review.googlesource.com/138561
> Reviewed-by: Robert Phillips <robertphillips@google.com>
> Commit-Queue: Stephen White <senorblanco@chromium.org>
TBR=robertphillips@google.com,senorblanco@chromium.org
Change-Id: I6ecfb4c487d6f96e9fae7b8b40d74162354ed57c
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 851409.
Reviewed-on: https://skia-review.googlesource.com/138640
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
diff --git a/src/gpu/GrTessellator.cpp b/src/gpu/GrTessellator.cpp
index 6490920..6cd5438 100644
--- a/src/gpu/GrTessellator.cpp
+++ b/src/gpu/GrTessellator.cpp
@@ -1055,16 +1055,16 @@
for (;;) {
if (edge->fPrevEdgeAbove && (edge->fTop == edge->fPrevEdgeAbove->fTop ||
!edge->fPrevEdgeAbove->isLeftOf(edge->fTop))) {
- merge_edges_above(edge->fPrevEdgeAbove, edge, activeEdges, current, c);
+ merge_edges_above(edge, edge->fPrevEdgeAbove, activeEdges, current, c);
} else if (edge->fNextEdgeAbove && (edge->fTop == edge->fNextEdgeAbove->fTop ||
!edge->isLeftOf(edge->fNextEdgeAbove->fTop))) {
- merge_edges_above(edge->fNextEdgeAbove, edge, activeEdges, current, c);
+ merge_edges_above(edge, edge->fNextEdgeAbove, activeEdges, current, c);
} else if (edge->fPrevEdgeBelow && (edge->fBottom == edge->fPrevEdgeBelow->fBottom ||
!edge->fPrevEdgeBelow->isLeftOf(edge->fBottom))) {
- merge_edges_below(edge->fPrevEdgeBelow, edge, activeEdges, current, c);
+ merge_edges_below(edge, edge->fPrevEdgeBelow, activeEdges, current, c);
} else if (edge->fNextEdgeBelow && (edge->fBottom == edge->fNextEdgeBelow->fBottom ||
!edge->isLeftOf(edge->fNextEdgeBelow->fBottom))) {
- merge_edges_below(edge->fNextEdgeBelow, edge, activeEdges, current, c);
+ merge_edges_below(edge, edge->fNextEdgeBelow, activeEdges, current, c);
} else {
break;
}