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

Side by Side 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "PathOpsTSectDebug.h" 8 #include "PathOpsTSectDebug.h"
9 #include "SkOpCoincidence.h" 9 #include "SkOpCoincidence.h"
10 #include "SkOpContour.h" 10 #include "SkOpContour.h"
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 178
179 void SkPathOpsDebug::WindingPrintf(int wind) { 179 void SkPathOpsDebug::WindingPrintf(int wind) {
180 if (wind == SK_MinS32) { 180 if (wind == SK_MinS32) {
181 SkDebugf("?"); 181 SkDebugf("?");
182 } else { 182 } else {
183 SkDebugf("%d", wind); 183 SkDebugf("%d", wind);
184 } 184 }
185 } 185 }
186 #endif 186 #endif
187 187
188 void SkDConic::dump() const {
189 dumpInner();
190 SkDebugf("},\n");
191 }
192
193 void SkDConic::dumpID(int id) const {
194 dumpInner();
195 SkDebugf("} id=%d\n", id);
196 }
197
198 void SkDConic::dumpInner() const {
199 SkDebugf("{{");
200 int index = 0;
201 do {
202 fPts[index].dump();
203 SkDebugf(", ");
204 } while (++index < 2);
205 fPts[index].dump();
206 SkDebugf("}, %1.9g", fWeight);
207 }
208
188 void SkDCubic::dump() const { 209 void SkDCubic::dump() const {
189 dumpInner(); 210 this->dumpInner();
190 SkDebugf("}},\n"); 211 SkDebugf("}},\n");
191 } 212 }
192 213
193 void SkDCubic::dumpID(int id) const { 214 void SkDCubic::dumpID(int id) const {
194 dumpInner(); 215 this->dumpInner();
195 SkDebugf("}} id=%d\n", id); 216 SkDebugf("}} id=%d\n", id);
196 } 217 }
197 218
198 static inline bool double_is_NaN(double x) { return x != x; } 219 static inline bool double_is_NaN(double x) { return x != x; }
199 220
200 void SkDCubic::dumpInner() const { 221 void SkDCubic::dumpInner() const {
201 SkDebugf("{{"); 222 SkDebugf("{{");
202 int index = 0; 223 int index = 0;
203 do { 224 do {
204 if (index != 0) { 225 if (index != 0) {
205 if (double_is_NaN(fPts[index].fX) && double_is_NaN(fPts[index].fY)) { 226 if (double_is_NaN(fPts[index].fX) && double_is_NaN(fPts[index].fY)) {
206 return; 227 return;
207 } 228 }
208 SkDebugf(", "); 229 SkDebugf(", ");
209 } 230 }
210 fPts[index].dump(); 231 fPts[index].dump();
211 } while (++index < 3); 232 } while (++index < 3);
212 if (double_is_NaN(fPts[index].fX) && double_is_NaN(fPts[index].fY)) { 233 if (double_is_NaN(fPts[index].fX) && double_is_NaN(fPts[index].fY)) {
213 return; 234 return;
214 } 235 }
215 SkDebugf(", "); 236 SkDebugf(", ");
216 fPts[index].dump(); 237 fPts[index].dump();
217 } 238 }
218 239
240 void SkDCurve::dumpID(int id) const {
241 #ifndef SK_RELEASE
242 switch(fVerb) {
243 case SkPath::kLine_Verb:
244 fLine.dumpID(id);
245 break;
246 case SkPath::kQuad_Verb:
247 fQuad.dumpID(id);
248 break;
249 case SkPath::kConic_Verb:
250 fConic.dumpID(id);
251 break;
252 case SkPath::kCubic_Verb:
253 fCubic.dumpID(id);
254 break;
255 default:
256 SkASSERT(0);
257 }
258 #else
259 fCubic.dumpID(id);
260 #endif
261 }
262
219 void SkDLine::dump() const { 263 void SkDLine::dump() const {
264 this->dumpInner();
265 SkDebugf("}},\n");
266 }
267
268 void SkDLine::dumpID(int id) const {
269 this->dumpInner();
270 SkDebugf("}} id=%d\n", id);
271 }
272
273 void SkDLine::dumpInner() const {
220 SkDebugf("{{"); 274 SkDebugf("{{");
221 fPts[0].dump(); 275 fPts[0].dump();
222 SkDebugf(", "); 276 SkDebugf(", ");
223 fPts[1].dump(); 277 fPts[1].dump();
224 SkDebugf("}},\n");
225 } 278 }
226 279
227 void SkDPoint::dump() const { 280 void SkDPoint::dump() const {
228 SkDebugf("{"); 281 SkDebugf("{");
229 DebugDumpDouble(fX); 282 DebugDumpDouble(fX);
230 SkDebugf(", "); 283 SkDebugf(", ");
231 DebugDumpDouble(fY); 284 DebugDumpDouble(fY);
232 SkDebugf("}"); 285 SkDebugf("}");
233 } 286 }
234 287
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 } 484 }
432 } 485 }
433 486
434 void SkPathOpsDebug::DumpContoursSpans(const SkTDArray<SkOpContour* >* contours) { 487 void SkPathOpsDebug::DumpContoursSpans(const SkTDArray<SkOpContour* >* contours) {
435 int count = contours->count(); 488 int count = contours->count();
436 for (int index = 0; index < count; ++index) { 489 for (int index = 0; index < count; ++index) {
437 (*contours)[index]->dumpSpans(); 490 (*contours)[index]->dumpSpans();
438 } 491 }
439 } 492 }
440 493
441 const SkTSpan<SkDCubic>* DebugSpan(const SkTSect<SkDCubic>* sect, int id) { 494 template <typename TCurve, typename OppCurve>
495 const SkTSpan<TCurve, OppCurve>* DebugSpan(const SkTSect<TCurve, OppCurve>* sect , int id) {
442 return sect->debugSpan(id); 496 return sect->debugSpan(id);
443 } 497 }
444 498
445 const SkTSpan<SkDQuad>* DebugSpan(const SkTSect<SkDQuad>* sect, int id) { 499 void DontCallDebugSpan(int id);
446 return sect->debugSpan(id); 500 void DontCallDebugSpan(int id) { // exists to instantiate the templates
447 } 501 SkDQuad quad;
448 502 SkDConic conic;
449 const SkTSpan<SkDCubic>* DebugT(const SkTSect<SkDCubic>* sect, double t) { 503 SkDCubic cubic;
504 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
505 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
506 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
507 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
508 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
509 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
510 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
511 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
512 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
513 DebugSpan(&q1q2, id);
514 DebugSpan(&q1k2, id);
515 DebugSpan(&q1c2, id);
516 DebugSpan(&k1q2, id);
517 DebugSpan(&k1k2, id);
518 DebugSpan(&k1c2, id);
519 DebugSpan(&c1q2, id);
520 DebugSpan(&c1k2, id);
521 DebugSpan(&c1c2, id);
522 }
523
524 template <typename TCurve, typename OppCurve>
525 const SkTSpan<TCurve, OppCurve>* DebugT(const SkTSect<TCurve, OppCurve>* sect, d ouble t) {
450 return sect->debugT(t); 526 return sect->debugT(t);
451 } 527 }
452 528
453 const SkTSpan<SkDQuad>* DebugT(const SkTSect<SkDQuad>* sect, double t) { 529 void DontCallDebugT(double t);
454 return sect->debugT(t); 530 void DontCallDebugT(double t) { // exists to instantiate the templates
455 } 531 SkDQuad quad;
456 532 SkDConic conic;
457 const SkTSpan<SkDCubic>* DebugSpan(const SkTSpan<SkDCubic>* span, int id) { 533 SkDCubic cubic;
458 return span->debugSpan(id); 534 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
459 } 535 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
460 536 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
461 const SkTSpan<SkDQuad>* DebugSpan(const SkTSpan<SkDQuad>* span, int id) { 537 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
462 return span->debugSpan(id); 538 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
463 } 539 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
464 540 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
465 const SkTSpan<SkDCubic>* DebugT(const SkTSpan<SkDCubic>* span, double t) { 541 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
466 return span->debugT(t); 542 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
467 } 543 DebugT(&q1q2, t);
468 544 DebugT(&q1k2, t);
469 const SkTSpan<SkDQuad>* DebugT(const SkTSpan<SkDQuad>* span, double t) { 545 DebugT(&q1c2, t);
470 return span->debugT(t); 546 DebugT(&k1q2, t);
471 } 547 DebugT(&k1k2, t);
472 548 DebugT(&k1c2, t);
473 void Dump(const SkTSect<SkDCubic>* sect) { 549 DebugT(&c1q2, t);
550 DebugT(&c1k2, t);
551 DebugT(&c1c2, t);
552 }
553
554 template <typename TCurve, typename OppCurve>
555 void Dump(const SkTSect<TCurve, OppCurve>* sect) {
474 sect->dump(); 556 sect->dump();
475 } 557 }
476 558
477 void Dump(const SkTSect<SkDQuad>* sect) { 559 void DontCallDumpTSect();
478 sect->dump(); 560 void DontCallDumpTSect() { // exists to instantiate the templates
479 } 561 SkDQuad quad;
480 562 SkDConic conic;
481 void Dump(const SkTSpan<SkDCubic>* span) { 563 SkDCubic cubic;
564 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
565 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
566 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
567 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
568 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
569 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
570 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
571 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
572 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
573 Dump(&q1q2);
574 Dump(&q1k2);
575 Dump(&q1c2);
576 Dump(&k1q2);
577 Dump(&k1k2);
578 Dump(&k1c2);
579 Dump(&c1q2);
580 Dump(&c1k2);
581 Dump(&c1c2);
582 }
583
584 template <typename TCurve, typename OppCurve>
585 void Dump(const SkTSpan<TCurve, OppCurve>* span) {
482 span->dump(); 586 span->dump();
483 } 587 }
484 588
485 void Dump(const SkTSpan<SkDQuad>* span) { 589 void DontCallDumpTSpan();
486 span->dump(); 590 void DontCallDumpTSpan() { // exists to instantiate the templates
487 } 591 SkTSpan<SkDQuad, SkDQuad> q1q2;
488 592 SkTSpan<SkDQuad, SkDConic> q1k2;
489 void DumpBoth(SkTSect<SkDCubic>* sect1, SkTSect<SkDCubic>* sect2) { 593 SkTSpan<SkDQuad, SkDCubic> q1c2;
594 SkTSpan<SkDConic, SkDQuad> k1q2;
595 SkTSpan<SkDConic, SkDConic> k1k2;
596 SkTSpan<SkDConic, SkDCubic> k1c2;
597 SkTSpan<SkDCubic, SkDQuad> c1q2;
598 SkTSpan<SkDCubic, SkDConic> c1k2;
599 SkTSpan<SkDCubic, SkDCubic> c1c2;
600 Dump(&q1q2);
601 Dump(&q1k2);
602 Dump(&q1c2);
603 Dump(&k1q2);
604 Dump(&k1k2);
605 Dump(&k1c2);
606 Dump(&c1q2);
607 Dump(&c1k2);
608 Dump(&c1c2);
609 }
610
611 template <typename TCurve, typename OppCurve>
612 void DumpBoth(SkTSect<TCurve, OppCurve>* sect1, SkTSect<OppCurve, TCurve>* sect2 ) {
490 sect1->dumpBoth(sect2); 613 sect1->dumpBoth(sect2);
491 } 614 }
492 615
493 void DumpBoth(SkTSect<SkDQuad>* sect1, SkTSect<SkDQuad>* sect2) { 616 void DontCallDumpBoth();
494 sect1->dumpBoth(sect2); 617 void DontCallDumpBoth() { // exists to instantiate the templates
495 } 618 SkDQuad quad;
496 619 SkDConic conic;
497 void DumpCoin(SkTSect<SkDCubic>* sect1) { 620 SkDCubic cubic;
621 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
622 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
623 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
624 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
625 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
626 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
627 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
628 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
629 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
630 DumpBoth(&q1q2, &q1q2);
631 DumpBoth(&q1k2, &k1q2);
632 DumpBoth(&q1c2, &c1q2);
633 DumpBoth(&k1q2, &q1k2);
634 DumpBoth(&k1k2, &k1k2);
635 DumpBoth(&k1c2, &c1k2);
636 DumpBoth(&c1q2, &q1c2);
637 DumpBoth(&c1k2, &k1c2);
638 DumpBoth(&c1c2, &c1c2);
639 }
640
641 template <typename TCurve, typename OppCurve>
642 void DumpBounds(SkTSect<TCurve, OppCurve>* sect1, int id) {
643 sect1->dumpBounds(id);
644 }
645
646 void DontCallDumpBounds();
647 void DontCallDumpBounds() {
648 SkDQuad quad;
649 SkDConic conic;
650 SkDCubic cubic;
651 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
652 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
653 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
654 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
655 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
656 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
657 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
658 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
659 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
660 DumpBounds(&q1q2, 0);
661 DumpBounds(&q1k2, 0);
662 DumpBounds(&q1c2, 0);
663 DumpBounds(&k1q2, 0);
664 DumpBounds(&k1k2, 0);
665 DumpBounds(&k1c2, 0);
666 DumpBounds(&c1q2, 0);
667 DumpBounds(&c1k2, 0);
668 DumpBounds(&c1c2, 0);
669 }
670
671 template <typename TCurve, typename OppCurve>
672 void DumpCoin(SkTSect<TCurve, OppCurve>* sect1) {
498 sect1->dumpCoin(); 673 sect1->dumpCoin();
499 } 674 }
500 675
501 void DumpCoin(SkTSect<SkDQuad>* sect1) { 676 void DontCallDumpCoin();
502 sect1->dumpCoin(); 677 void DontCallDumpCoin() { // exists to instantiate the templates
503 } 678 SkDQuad quad;
504 679 SkDConic conic;
505 void DumpCoinCurves(SkTSect<SkDCubic>* sect1) { 680 SkDCubic cubic;
681 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
682 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
683 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
684 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
685 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
686 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
687 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
688 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
689 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
690 DumpCoin(&q1q2);
691 DumpCoin(&q1k2);
692 DumpCoin(&q1c2);
693 DumpCoin(&k1q2);
694 DumpCoin(&k1k2);
695 DumpCoin(&k1c2);
696 DumpCoin(&c1q2);
697 DumpCoin(&c1k2);
698 DumpCoin(&c1c2);
699 }
700
701 template <typename TCurve, typename OppCurve>
702 void DumpCoinCurves(SkTSect<TCurve, OppCurve>* sect1) {
506 sect1->dumpCoinCurves(); 703 sect1->dumpCoinCurves();
507 } 704 }
508 705
509 void DumpCoinCurves(SkTSect<SkDQuad>* sect1) { 706 void DontCallDumpCoinCurves();
510 sect1->dumpCoinCurves(); 707 void DontCallDumpCoinCurves() { // exists to instantiate the templates
511 } 708 SkDQuad quad;
512 709 SkDConic conic;
513 void DumpCurves(const SkTSect<SkDQuad>* sect) { 710 SkDCubic cubic;
711 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
712 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
713 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
714 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
715 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
716 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
717 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
718 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
719 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
720 DumpCoinCurves(&q1q2);
721 DumpCoinCurves(&q1k2);
722 DumpCoinCurves(&q1c2);
723 DumpCoinCurves(&k1q2);
724 DumpCoinCurves(&k1k2);
725 DumpCoinCurves(&k1c2);
726 DumpCoinCurves(&c1q2);
727 DumpCoinCurves(&c1k2);
728 DumpCoinCurves(&c1c2);
729 }
730
731 template <typename TCurve, typename OppCurve>
732 void DumpCurves(const SkTSect<TCurve, OppCurve>* sect) {
514 sect->dumpCurves(); 733 sect->dumpCurves();
515 } 734 }
516 735
517 void DumpCurves(const SkTSect<SkDCubic>* sect) { 736 void DontCallDumpCurves();
518 sect->dumpCurves(); 737 void DontCallDumpCurves() { // exists to instantiate the templates
738 SkDQuad quad;
739 SkDConic conic;
740 SkDCubic cubic;
741 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
742 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
743 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1));
744 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
745 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
746 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
747 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
748 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
749 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1));
750 DumpCurves(&q1q2);
751 DumpCurves(&q1k2);
752 DumpCurves(&q1c2);
753 DumpCurves(&k1q2);
754 DumpCurves(&k1k2);
755 DumpCurves(&k1c2);
756 DumpCurves(&c1q2);
757 DumpCurves(&c1k2);
758 DumpCurves(&c1c2);
519 } 759 }
520 760
521 static void dumpTestCase(const SkDQuad& quad1, const SkDQuad& quad2, int testNo) { 761 static void dumpTestCase(const SkDQuad& quad1, const SkDQuad& quad2, int testNo) {
522 SkDebugf("\n<div id=\"quad%d\">\n", testNo); 762 SkDebugf("\n<div id=\"quad%d\">\n", testNo);
523 quad1.dumpInner(); 763 quad1.dumpInner();
524 SkDebugf("}}, "); 764 SkDebugf("}}, ");
525 quad2.dump(); 765 quad2.dump();
526 SkDebugf("</div>\n\n"); 766 SkDebugf("</div>\n\n");
527 } 767 }
528 768
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
896 void SkOpSegment::dumpCoin() const { 1136 void SkOpSegment::dumpCoin() const {
897 const SkOpSpan* span = &fHead; 1137 const SkOpSpan* span = &fHead;
898 do { 1138 do {
899 span->dumpCoin(); 1139 span->dumpCoin();
900 } while ((span = span->next()->upCastable())); 1140 } while ((span = span->next()->upCastable()));
901 } 1141 }
902 1142
903 void SkOpSegment::dumpPts() const { 1143 void SkOpSegment::dumpPts() const {
904 int last = SkPathOpsVerbToPoints(fVerb); 1144 int last = SkPathOpsVerbToPoints(fVerb);
905 SkDebugf("seg=%d {{", this->debugID()); 1145 SkDebugf("seg=%d {{", this->debugID());
1146 if (fVerb == SkPath::kConic_Verb) {
1147 SkDebugf("{");
1148 }
906 int index = 0; 1149 int index = 0;
907 do { 1150 do {
908 SkDPoint::Dump(fPts[index]); 1151 SkDPoint::Dump(fPts[index]);
909 SkDebugf(", "); 1152 SkDebugf(", ");
910 } while (++index < last); 1153 } while (++index < last);
911 SkDPoint::Dump(fPts[index]); 1154 SkDPoint::Dump(fPts[index]);
912 SkDebugf("}}\n"); 1155 SkDebugf("}}");
1156 if (fVerb == SkPath::kConic_Verb) {
1157 SkDebugf(", %1.9gf}", fWeight);
1158 }
1159 SkDebugf("\n");
913 } 1160 }
914 1161
915 void SkCoincidentSpans::dump() const { 1162 void SkCoincidentSpans::dump() const {
916 SkDebugf("- seg=%d span=%d ptT=%d ", fCoinPtTStart->segment()->debugID(), 1163 SkDebugf("- seg=%d span=%d ptT=%d ", fCoinPtTStart->segment()->debugID(),
917 fCoinPtTStart->span()->debugID(), fCoinPtTStart->debugID()); 1164 fCoinPtTStart->span()->debugID(), fCoinPtTStart->debugID());
918 fCoinPtTStart->dumpBase(); 1165 fCoinPtTStart->dumpBase();
919 SkDebugf(" span=%d ptT=%d ", fCoinPtTEnd->span()->debugID(), fCoinPtTEnd->de bugID()); 1166 SkDebugf(" span=%d ptT=%d ", fCoinPtTEnd->span()->debugID(), fCoinPtTEnd->de bugID());
920 fCoinPtTEnd->dumpBase(); 1167 fCoinPtTEnd->dumpBase();
921 if (fCoinPtTStart->segment()->operand()) { 1168 if (fCoinPtTStart->segment()->operand()) {
922 SkDebugf(" operand"); 1169 SkDebugf(" operand");
(...skipping 23 matching lines...) Expand all
946 span = span->fNext; 1193 span = span->fNext;
947 } 1194 }
948 } 1195 }
949 1196
950 void SkOpContour::dump() { 1197 void SkOpContour::dump() {
951 SkDebugf("contour=%d count=%d\n", this->debugID(), fCount); 1198 SkDebugf("contour=%d count=%d\n", this->debugID(), fCount);
952 if (!fCount) { 1199 if (!fCount) {
953 return; 1200 return;
954 } 1201 }
955 const SkOpSegment* segment = &fHead; 1202 const SkOpSegment* segment = &fHead;
956 PATH_OPS_DEBUG_CODE(fIndent = 0); 1203 SkDEBUGCODE(fIndent = 0);
957 indentDump(); 1204 indentDump();
958 do { 1205 do {
959 segment->dump(); 1206 segment->dump();
960 } while ((segment = segment->next())); 1207 } while ((segment = segment->next()));
961 outdentDump(); 1208 outdentDump();
962 } 1209 }
963 1210
964 void SkOpContour::dumpAll() { 1211 void SkOpContour::dumpAll() {
965 SkDebugf("contour=%d count=%d\n", this->debugID(), fCount); 1212 SkDebugf("contour=%d count=%d\n", this->debugID(), fCount);
966 if (!fCount) { 1213 if (!fCount) {
967 return; 1214 return;
968 } 1215 }
969 const SkOpSegment* segment = &fHead; 1216 const SkOpSegment* segment = &fHead;
970 PATH_OPS_DEBUG_CODE(fIndent = 0); 1217 SkDEBUGCODE(fIndent = 0);
971 indentDump(); 1218 indentDump();
972 do { 1219 do {
973 segment->dumpAll(); 1220 segment->dumpAll();
974 } while ((segment = segment->next())); 1221 } while ((segment = segment->next()));
975 outdentDump(); 1222 outdentDump();
976 } 1223 }
977 1224
978 1225
979 void SkOpContour::dumpAngles() const { 1226 void SkOpContour::dumpAngles() const {
980 SkDebugf("contour=%d\n", this->debugID()); 1227 SkDebugf("contour=%d\n", this->debugID());
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
1190 SkPathOpsDebug::DumpContoursPt(contours, segmentID); 1437 SkPathOpsDebug::DumpContoursPt(contours, segmentID);
1191 } 1438 }
1192 1439
1193 void DumpPts(const SkTDArray<SkOpContour* >* contours) { 1440 void DumpPts(const SkTDArray<SkOpContour* >* contours) {
1194 SkPathOpsDebug::DumpContoursPts(contours); 1441 SkPathOpsDebug::DumpContoursPts(contours);
1195 } 1442 }
1196 1443
1197 #if DEBUG_T_SECT_DUMP > 1 1444 #if DEBUG_T_SECT_DUMP > 1
1198 int gDumpTSectNum; 1445 int gDumpTSectNum;
1199 #endif 1446 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698