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

Unified Diff: tests/PathOpsDebug.cpp

Issue 1037953004: add conics to path ops (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix linux build Created 5 years, 8 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
Index: tests/PathOpsDebug.cpp
diff --git a/tests/PathOpsDebug.cpp b/tests/PathOpsDebug.cpp
index 93fe33d99a64c1f1e5ef62700d43f0bb63a6aab9..cb25db8b542fa0c2701d245fc45eac36d65c55f2 100755
--- a/tests/PathOpsDebug.cpp
+++ b/tests/PathOpsDebug.cpp
@@ -185,13 +185,34 @@ void SkPathOpsDebug::WindingPrintf(int wind) {
}
#endif
-void SkDCubic::dump() const {
+void SkDConic::dump() const {
dumpInner();
+ SkDebugf("},\n");
+}
+
+void SkDConic::dumpID(int id) const {
+ dumpInner();
+ SkDebugf("} id=%d\n", id);
+}
+
+void SkDConic::dumpInner() const {
+ SkDebugf("{{");
+ int index = 0;
+ do {
+ fPts[index].dump();
+ SkDebugf(", ");
+ } while (++index < 2);
+ fPts[index].dump();
+ SkDebugf("}, %1.9g", fWeight);
+}
+
+void SkDCubic::dump() const {
+ this->dumpInner();
SkDebugf("}},\n");
}
void SkDCubic::dumpID(int id) const {
- dumpInner();
+ this->dumpInner();
SkDebugf("}} id=%d\n", id);
}
@@ -216,12 +237,44 @@ void SkDCubic::dumpInner() const {
fPts[index].dump();
}
+void SkDCurve::dumpID(int id) const {
+#ifndef SK_RELEASE
+ switch(fVerb) {
+ case SkPath::kLine_Verb:
+ fLine.dumpID(id);
+ break;
+ case SkPath::kQuad_Verb:
+ fQuad.dumpID(id);
+ break;
+ case SkPath::kConic_Verb:
+ fConic.dumpID(id);
+ break;
+ case SkPath::kCubic_Verb:
+ fCubic.dumpID(id);
+ break;
+ default:
+ SkASSERT(0);
+ }
+#else
+ fCubic.dumpID(id);
+#endif
+}
+
void SkDLine::dump() const {
+ this->dumpInner();
+ SkDebugf("}},\n");
+}
+
+void SkDLine::dumpID(int id) const {
+ this->dumpInner();
+ SkDebugf("}} id=%d\n", id);
+}
+
+void SkDLine::dumpInner() const {
SkDebugf("{{");
fPts[0].dump();
SkDebugf(", ");
fPts[1].dump();
- SkDebugf("}},\n");
}
void SkDPoint::dump() const {
@@ -438,84 +491,271 @@ void SkPathOpsDebug::DumpContoursSpans(const SkTDArray<SkOpContour* >* contours)
}
}
-const SkTSpan<SkDCubic>* DebugSpan(const SkTSect<SkDCubic>* sect, int id) {
+template <typename TCurve, typename OppCurve>
+const SkTSpan<TCurve, OppCurve>* DebugSpan(const SkTSect<TCurve, OppCurve>* sect, int id) {
return sect->debugSpan(id);
}
-const SkTSpan<SkDQuad>* DebugSpan(const SkTSect<SkDQuad>* sect, int id) {
- return sect->debugSpan(id);
-}
-
-const SkTSpan<SkDCubic>* DebugT(const SkTSect<SkDCubic>* sect, double t) {
+void DontCallDebugSpan(int id);
+void DontCallDebugSpan(int id) { // exists to instantiate the templates
+ SkDQuad quad;
+ SkDConic conic;
+ SkDCubic cubic;
+ SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ DebugSpan(&q1q2, id);
+ DebugSpan(&q1k2, id);
+ DebugSpan(&q1c2, id);
+ DebugSpan(&k1q2, id);
+ DebugSpan(&k1k2, id);
+ DebugSpan(&k1c2, id);
+ DebugSpan(&c1q2, id);
+ DebugSpan(&c1k2, id);
+ DebugSpan(&c1c2, id);
+}
+
+template <typename TCurve, typename OppCurve>
+const SkTSpan<TCurve, OppCurve>* DebugT(const SkTSect<TCurve, OppCurve>* sect, double t) {
return sect->debugT(t);
}
-const SkTSpan<SkDQuad>* DebugT(const SkTSect<SkDQuad>* sect, double t) {
- return sect->debugT(t);
-}
-
-const SkTSpan<SkDCubic>* DebugSpan(const SkTSpan<SkDCubic>* span, int id) {
- return span->debugSpan(id);
-}
-
-const SkTSpan<SkDQuad>* DebugSpan(const SkTSpan<SkDQuad>* span, int id) {
- return span->debugSpan(id);
-}
-
-const SkTSpan<SkDCubic>* DebugT(const SkTSpan<SkDCubic>* span, double t) {
- return span->debugT(t);
-}
-
-const SkTSpan<SkDQuad>* DebugT(const SkTSpan<SkDQuad>* span, double t) {
- return span->debugT(t);
-}
-
-void Dump(const SkTSect<SkDCubic>* sect) {
- sect->dump();
-}
-
-void Dump(const SkTSect<SkDQuad>* sect) {
+void DontCallDebugT(double t);
+void DontCallDebugT(double t) { // exists to instantiate the templates
+ SkDQuad quad;
+ SkDConic conic;
+ SkDCubic cubic;
+ SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ DebugT(&q1q2, t);
+ DebugT(&q1k2, t);
+ DebugT(&q1c2, t);
+ DebugT(&k1q2, t);
+ DebugT(&k1k2, t);
+ DebugT(&k1c2, t);
+ DebugT(&c1q2, t);
+ DebugT(&c1k2, t);
+ DebugT(&c1c2, t);
+}
+
+template <typename TCurve, typename OppCurve>
+void Dump(const SkTSect<TCurve, OppCurve>* sect) {
sect->dump();
}
-void Dump(const SkTSpan<SkDCubic>* span) {
+void DontCallDumpTSect();
+void DontCallDumpTSect() { // exists to instantiate the templates
+ SkDQuad quad;
+ SkDConic conic;
+ SkDCubic cubic;
+ SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ Dump(&q1q2);
+ Dump(&q1k2);
+ Dump(&q1c2);
+ Dump(&k1q2);
+ Dump(&k1k2);
+ Dump(&k1c2);
+ Dump(&c1q2);
+ Dump(&c1k2);
+ Dump(&c1c2);
+}
+
+template <typename TCurve, typename OppCurve>
+void Dump(const SkTSpan<TCurve, OppCurve>* span) {
span->dump();
}
-void Dump(const SkTSpan<SkDQuad>* span) {
- span->dump();
-}
-
-void DumpBoth(SkTSect<SkDCubic>* sect1, SkTSect<SkDCubic>* sect2) {
- sect1->dumpBoth(sect2);
-}
-
-void DumpBoth(SkTSect<SkDQuad>* sect1, SkTSect<SkDQuad>* sect2) {
+void DontCallDumpTSpan();
+void DontCallDumpTSpan() { // exists to instantiate the templates
+ SkTSpan<SkDQuad, SkDQuad> q1q2;
+ SkTSpan<SkDQuad, SkDConic> q1k2;
+ SkTSpan<SkDQuad, SkDCubic> q1c2;
+ SkTSpan<SkDConic, SkDQuad> k1q2;
+ SkTSpan<SkDConic, SkDConic> k1k2;
+ SkTSpan<SkDConic, SkDCubic> k1c2;
+ SkTSpan<SkDCubic, SkDQuad> c1q2;
+ SkTSpan<SkDCubic, SkDConic> c1k2;
+ SkTSpan<SkDCubic, SkDCubic> c1c2;
+ Dump(&q1q2);
+ Dump(&q1k2);
+ Dump(&q1c2);
+ Dump(&k1q2);
+ Dump(&k1k2);
+ Dump(&k1c2);
+ Dump(&c1q2);
+ Dump(&c1k2);
+ Dump(&c1c2);
+}
+
+template <typename TCurve, typename OppCurve>
+void DumpBoth(SkTSect<TCurve, OppCurve>* sect1, SkTSect<OppCurve, TCurve>* sect2) {
sect1->dumpBoth(sect2);
}
-void DumpCoin(SkTSect<SkDCubic>* sect1) {
- sect1->dumpCoin();
-}
-
-void DumpCoin(SkTSect<SkDQuad>* sect1) {
+void DontCallDumpBoth();
+void DontCallDumpBoth() { // exists to instantiate the templates
+ SkDQuad quad;
+ SkDConic conic;
+ SkDCubic cubic;
+ SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ DumpBoth(&q1q2, &q1q2);
+ DumpBoth(&q1k2, &k1q2);
+ DumpBoth(&q1c2, &c1q2);
+ DumpBoth(&k1q2, &q1k2);
+ DumpBoth(&k1k2, &k1k2);
+ DumpBoth(&k1c2, &c1k2);
+ DumpBoth(&c1q2, &q1c2);
+ DumpBoth(&c1k2, &k1c2);
+ DumpBoth(&c1c2, &c1c2);
+}
+
+template <typename TCurve, typename OppCurve>
+void DumpBounds(SkTSect<TCurve, OppCurve>* sect1, int id) {
+ sect1->dumpBounds(id);
+}
+
+void DontCallDumpBounds();
+void DontCallDumpBounds() {
+ SkDQuad quad;
+ SkDConic conic;
+ SkDCubic cubic;
+ SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ DumpBounds(&q1q2, 0);
+ DumpBounds(&q1k2, 0);
+ DumpBounds(&q1c2, 0);
+ DumpBounds(&k1q2, 0);
+ DumpBounds(&k1k2, 0);
+ DumpBounds(&k1c2, 0);
+ DumpBounds(&c1q2, 0);
+ DumpBounds(&c1k2, 0);
+ DumpBounds(&c1c2, 0);
+}
+
+template <typename TCurve, typename OppCurve>
+void DumpCoin(SkTSect<TCurve, OppCurve>* sect1) {
sect1->dumpCoin();
}
-void DumpCoinCurves(SkTSect<SkDCubic>* sect1) {
- sect1->dumpCoinCurves();
-}
-
-void DumpCoinCurves(SkTSect<SkDQuad>* sect1) {
+void DontCallDumpCoin();
+void DontCallDumpCoin() { // exists to instantiate the templates
+ SkDQuad quad;
+ SkDConic conic;
+ SkDCubic cubic;
+ SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ DumpCoin(&q1q2);
+ DumpCoin(&q1k2);
+ DumpCoin(&q1c2);
+ DumpCoin(&k1q2);
+ DumpCoin(&k1k2);
+ DumpCoin(&k1c2);
+ DumpCoin(&c1q2);
+ DumpCoin(&c1k2);
+ DumpCoin(&c1c2);
+}
+
+template <typename TCurve, typename OppCurve>
+void DumpCoinCurves(SkTSect<TCurve, OppCurve>* sect1) {
sect1->dumpCoinCurves();
}
-void DumpCurves(const SkTSect<SkDQuad>* sect) {
+void DontCallDumpCoinCurves();
+void DontCallDumpCoinCurves() { // exists to instantiate the templates
+ SkDQuad quad;
+ SkDConic conic;
+ SkDCubic cubic;
+ SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ DumpCoinCurves(&q1q2);
+ DumpCoinCurves(&q1k2);
+ DumpCoinCurves(&q1c2);
+ DumpCoinCurves(&k1q2);
+ DumpCoinCurves(&k1k2);
+ DumpCoinCurves(&k1c2);
+ DumpCoinCurves(&c1q2);
+ DumpCoinCurves(&c1k2);
+ DumpCoinCurves(&c1c2);
+}
+
+template <typename TCurve, typename OppCurve>
+void DumpCurves(const SkTSect<TCurve, OppCurve>* sect) {
sect->dumpCurves();
}
-void DumpCurves(const SkTSect<SkDCubic>* sect) {
- sect->dumpCurves();
+void DontCallDumpCurves();
+void DontCallDumpCurves() { // exists to instantiate the templates
+ SkDQuad quad;
+ SkDConic conic;
+ SkDCubic cubic;
+ SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
+ DumpCurves(&q1q2);
+ DumpCurves(&q1k2);
+ DumpCurves(&q1c2);
+ DumpCurves(&k1q2);
+ DumpCurves(&k1k2);
+ DumpCurves(&k1c2);
+ DumpCurves(&c1q2);
+ DumpCurves(&c1k2);
+ DumpCurves(&c1c2);
}
static void dumpTestCase(const SkDQuad& quad1, const SkDQuad& quad2, int testNo) {
@@ -903,13 +1143,20 @@ void SkOpSegment::dumpCoin() const {
void SkOpSegment::dumpPts() const {
int last = SkPathOpsVerbToPoints(fVerb);
SkDebugf("seg=%d {{", this->debugID());
+ if (fVerb == SkPath::kConic_Verb) {
+ SkDebugf("{");
+ }
int index = 0;
do {
SkDPoint::Dump(fPts[index]);
SkDebugf(", ");
} while (++index < last);
SkDPoint::Dump(fPts[index]);
- SkDebugf("}}\n");
+ SkDebugf("}}");
+ if (fVerb == SkPath::kConic_Verb) {
+ SkDebugf(", %1.9gf}", fWeight);
+ }
+ SkDebugf("\n");
}
void SkCoincidentSpans::dump() const {
@@ -953,7 +1200,7 @@ void SkOpContour::dump() {
return;
}
const SkOpSegment* segment = &fHead;
- PATH_OPS_DEBUG_CODE(fIndent = 0);
+ SkDEBUGCODE(fIndent = 0);
indentDump();
do {
segment->dump();
@@ -967,7 +1214,7 @@ void SkOpContour::dumpAll() {
return;
}
const SkOpSegment* segment = &fHead;
- PATH_OPS_DEBUG_CODE(fIndent = 0);
+ SkDEBUGCODE(fIndent = 0);
indentDump();
do {
segment->dumpAll();

Powered by Google App Engine
This is Rietveld 408576698