Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Unified Diff: src/pathops/SkPathOpsTSect.h

Issue 1408923003: Revert of path ops: fix conic weight and partial coincidence (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/pathops/SkPathOpsRect.h ('k') | src/pathops/SkPathOpsWinding.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/pathops/SkPathOpsTSect.h
diff --git a/src/pathops/SkPathOpsTSect.h b/src/pathops/SkPathOpsTSect.h
index 56a320aab2190f2fb3d54c4e695e975a12dc9064..0da4d7f9f4248e25521d011cd3bcc33526e37cbb 100644
--- a/src/pathops/SkPathOpsTSect.h
+++ b/src/pathops/SkPathOpsTSect.h
@@ -11,12 +11,6 @@
#include "SkIntersections.h"
#include "SkTSort.h"
-#ifdef SK_DEBUG
-typedef uint8_t SkOpDebugBool;
-#else
-typedef bool SkOpDebugBool;
-#endif
-
/* TCurve and OppCurve are one of { SkDQuadratic, SkDConic, SkDCubic } */
template<typename TCurve, typename OppCurve>
class SkTCoincident {
@@ -25,20 +19,10 @@
this->init();
}
- void debugInit() {
-#ifdef SK_DEBUG
- this->fPerpPt.fX = this->fPerpPt.fY = SK_ScalarNaN;
- this->fPerpT = SK_ScalarNaN;
- this->fCoincident = 0xFF;
-#endif
- }
-
- char dumpIsCoincidentStr() const;
void dump() const;
bool isCoincident() const {
- SkASSERT(!!fCoincident == fCoincident);
- return SkToBool(fCoincident);
+ return fCoincident;
}
void init() {
@@ -67,7 +51,7 @@
private:
SkDPoint fPerpPt;
double fPerpT; // perpendicular intersection on opposite curve
- SkOpDebugBool fCoincident;
+ bool fCoincident;
};
template<typename TCurve, typename OppCurve> class SkTSect;
@@ -201,11 +185,11 @@
double fStartT;
double fEndT;
double fBoundsMax;
- SkOpDebugBool fCollapsed;
- SkOpDebugBool fHasPerp;
- SkOpDebugBool fIsLinear;
- SkOpDebugBool fIsLine;
- SkOpDebugBool fDeleted;
+ bool fCollapsed;
+ bool fHasPerp;
+ bool fIsLinear;
+ bool fIsLine;
+ bool fDeleted;
SkDEBUGCODE_(SkTSect<TCurve, OppCurve>* fDebugSect);
PATH_OPS_DEBUG_T_SECT_CODE(int fID);
friend class SkTSect<TCurve, OppCurve>;
@@ -285,7 +269,6 @@
SkTSpan<TCurve, OppCurve>** lastPtr);
int intersects(SkTSpan<TCurve, OppCurve>* span, SkTSect<OppCurve, TCurve>* opp,
SkTSpan<OppCurve, TCurve>* oppSpan, int* oppResult);
- bool isParallel(const SkDLine& thisLine, const SkTSect<OppCurve, TCurve>* opp) const;
int linesIntersect(SkTSpan<TCurve, OppCurve>* span, SkTSect<OppCurve, TCurve>* opp,
SkTSpan<OppCurve, TCurve>* oppSpan, SkIntersections* );
void markSpanGone(SkTSpan<TCurve, OppCurve>* span);
@@ -845,29 +828,21 @@
SkTSpan<TCurve, OppCurve>* result;
if (fDeleted) {
result = fDeleted;
+ result->reset();
fDeleted = result->fNext;
} else {
result = new (fHeap.allocThrow(sizeof(SkTSpan<TCurve, OppCurve>)))(
SkTSpan<TCurve, OppCurve>);
+ result->fBounded = nullptr;
#if DEBUG_T_SECT
++fDebugAllocatedCount;
#endif
}
- result->reset();
result->fHasPerp = false;
result->fDeleted = false;
++fActiveCount;
PATH_OPS_DEBUG_T_SECT_CODE(result->fID = fDebugCount++ * 2 + fID);
SkDEBUGCODE(result->fDebugSect = this);
-#ifdef SK_DEBUG
- result->fPart.debugInit();
- result->fCoinStart.debugInit();
- result->fCoinEnd.debugInit();
- result->fPrev = result->fNext = nullptr;
- result->fBounds.debugInit();
- result->fStartT = result->fEndT = result->fBoundsMax = SK_ScalarNaN;
- result->fCollapsed = result->fIsLinear = result->fIsLine = 0xFF;
-#endif
return result;
}
@@ -1302,31 +1277,6 @@
return *oppResult = 1;
}
-template<typename TCurve>
-static bool is_parallel(const SkDLine& thisLine, const TCurve& opp) {
- if (!opp.IsConic()) {
- return false; // FIXME : breaks a lot of stuff now
- }
- int finds = 0;
- SkDLine thisPerp;
- thisPerp.fPts[0].fX = thisLine.fPts[1].fX + (thisLine.fPts[1].fY - thisLine.fPts[0].fY);
- thisPerp.fPts[0].fY = thisLine.fPts[1].fY + (thisLine.fPts[0].fX - thisLine.fPts[1].fX);
- thisPerp.fPts[1] = thisLine.fPts[1];
- SkIntersections perpRayI;
- perpRayI.intersectRay(opp, thisPerp);
- for (int pIndex = 0; pIndex < perpRayI.used(); ++pIndex) {
- finds += perpRayI.pt(pIndex).approximatelyEqual(thisPerp.fPts[1]);
- }
- thisPerp.fPts[1].fX = thisLine.fPts[0].fX + (thisLine.fPts[1].fY - thisLine.fPts[0].fY);
- thisPerp.fPts[1].fY = thisLine.fPts[0].fY + (thisLine.fPts[0].fX - thisLine.fPts[1].fX);
- thisPerp.fPts[0] = thisLine.fPts[0];
- perpRayI.intersectRay(opp, thisPerp);
- for (int pIndex = 0; pIndex < perpRayI.used(); ++pIndex) {
- finds += perpRayI.pt(pIndex).approximatelyEqual(thisPerp.fPts[0]);
- }
- return finds >= 2;
-}
-
// while the intersection points are sufficiently far apart:
// construct the tangent lines from the intersections
// find the point where the tangent line intersects the opposite curve
@@ -1353,7 +1303,7 @@
ptMatches += thisRayI.pt(tIndex).approximatelyEqual(thisLine.fPts[lIndex]);
}
}
- if (ptMatches == 2 || is_parallel(thisLine, opp->fCurve)) {
+ if (ptMatches == 2) {
return 2;
}
}
@@ -1364,7 +1314,7 @@
ptMatches += oppRayI.pt(oIndex).approximatelyEqual(oppLine.fPts[lIndex]);
}
}
- if (ptMatches == 2|| is_parallel(oppLine, this->fCurve)) {
+ if (ptMatches == 2) {
return 2;
}
}
« no previous file with comments | « src/pathops/SkPathOpsRect.h ('k') | src/pathops/SkPathOpsWinding.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698