Index: src/pathops/SkPathOpsDebug.cpp |
diff --git a/src/pathops/SkPathOpsDebug.cpp b/src/pathops/SkPathOpsDebug.cpp |
index a0fcff58e01e31e0d3f8f4c7eb200e0f9dbde27c..476fafb4258ba2279c8efd72a208bd85cd6b414d 100644 |
--- a/src/pathops/SkPathOpsDebug.cpp |
+++ b/src/pathops/SkPathOpsDebug.cpp |
@@ -691,8 +691,8 @@ void SkIntersections::debugResetLoopCount() { |
} |
#endif |
+#include "SkPathOpsConic.h" |
#include "SkPathOpsCubic.h" |
-#include "SkPathOpsQuad.h" |
SkDCubic SkDQuad::debugToCubic() const { |
SkDCubic cubic; |
@@ -706,6 +706,21 @@ SkDCubic SkDQuad::debugToCubic() const { |
return cubic; |
} |
+void SkDQuad::debugSet(const SkDPoint* pts) { |
+ memcpy(fPts, pts, sizeof(fPts)); |
+ SkDEBUGCODE(fDebugGlobalState = nullptr); |
+} |
+ |
+void SkDCubic::debugSet(const SkDPoint* pts) { |
+ memcpy(fPts, pts, sizeof(fPts)); |
+ SkDEBUGCODE(fDebugGlobalState = nullptr); |
+} |
+ |
+void SkDConic::debugSet(const SkDPoint* pts, SkScalar weight) { |
+ fPts.debugSet(pts); |
+ fWeight = weight; |
+} |
+ |
void SkDRect::debugInit() { |
fLeft = fTop = fRight = fBottom = SK_ScalarNaN; |
} |
@@ -1595,6 +1610,7 @@ void SkOpCoincidence::debugAddEndMovedSpans(SkPathOpsDebug::GlitchLog* log) cons |
// for each coincident pair, match the spans |
// if the spans don't match, add the mssing pt to the segment and loop it in the opposite span |
void SkOpCoincidence::debugAddExpanded(SkPathOpsDebug::GlitchLog* log) const { |
+// DEBUG_SET_PHASE(); |
const SkCoincidentSpans* coin = this->fHead; |
if (!coin) { |
return; |
@@ -1639,14 +1655,15 @@ void SkOpCoincidence::debugAddExpanded(SkPathOpsDebug::GlitchLog* log) const { |
walk = walk->upCast()->next(); |
} while (!(walkOpp = walk->ptT()->contains(oSeg)) |
&& walk != coin->coinPtTEnd()->span()); |
+ FAIL_IF(!walkOpp, coin); |
nextT = walk->t(); |
oNextT = walkOpp->fT; |
} |
// use t ranges to guess which one is missing |
- double startRange = coin->coinPtTEnd()->fT - startPtT->fT; |
+ double startRange = nextT - priorT; |
FAIL_IF(!startRange, coin); |
- double startPart = (test->t() - startPtT->fT) / startRange; |
- double oStartRange = coin->oppPtTEnd()->fT - oStartPtT->fT; |
+ double startPart = (test->t() - priorT) / startRange; |
+ double oStartRange = oNextT - oPriorT; |
FAIL_IF(!oStartRange, coin); |
double oStartPart = (oTest->t() - oStartPtT->fT) / oStartRange; |
FAIL_IF(startPart == oStartPart, coin); |
@@ -2029,7 +2046,8 @@ void SkOpCoincidence::debugMark(SkPathOpsDebug::GlitchLog* log) const { |
const SkOpSegment* oSegment = oStart->segment(); |
const SkOpSpanBase* next = start; |
const SkOpSpanBase* oNext = oStart; |
- bool ordered = coin->ordered(); |
+ bool ordered; |
+ FAIL_IF(!coin->ordered(&ordered), coin); |
while ((next = next->upCast()->next()) != end) { |
FAIL_IF(!next->upCastable(), coin); |
if (next->upCast()->debugInsertCoincidence(log, oSegment, flipped, ordered), false) { |