| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 "GrTessellator.h" | 8 #include "GrTessellator.h" |
| 9 | 9 |
| 10 #include "GrPathUtils.h" | 10 #include "GrPathUtils.h" |
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 , fNext(nullptr) { | 353 , fNext(nullptr) { |
| 354 this->addEdge(edge); | 354 this->addEdge(edge); |
| 355 } | 355 } |
| 356 Side fSide; | 356 Side fSide; |
| 357 Edge* fFirstEdge; | 357 Edge* fFirstEdge; |
| 358 Edge* fLastEdge; | 358 Edge* fLastEdge; |
| 359 MonotonePoly* fPrev; | 359 MonotonePoly* fPrev; |
| 360 MonotonePoly* fNext; | 360 MonotonePoly* fNext; |
| 361 void addEdge(Edge* edge) { | 361 void addEdge(Edge* edge) { |
| 362 if (fSide == kRight_Side) { | 362 if (fSide == kRight_Side) { |
| 363 if (edge->fUsedInRightPoly) { | 363 SkASSERT(!edge->fUsedInRightPoly); |
| 364 return; | |
| 365 } | |
| 366 list_insert<Edge, &Edge::fRightPolyPrev, &Edge::fRightPolyNext>( | 364 list_insert<Edge, &Edge::fRightPolyPrev, &Edge::fRightPolyNext>( |
| 367 edge, fLastEdge, nullptr, &fFirstEdge, &fLastEdge); | 365 edge, fLastEdge, nullptr, &fFirstEdge, &fLastEdge); |
| 368 edge->fUsedInRightPoly = true; | 366 edge->fUsedInRightPoly = true; |
| 369 } else { | 367 } else { |
| 370 if (edge->fUsedInLeftPoly) { | 368 SkASSERT(!edge->fUsedInLeftPoly); |
| 371 return; | |
| 372 } | |
| 373 list_insert<Edge, &Edge::fLeftPolyPrev, &Edge::fLeftPolyNext>( | 369 list_insert<Edge, &Edge::fLeftPolyPrev, &Edge::fLeftPolyNext>( |
| 374 edge, fLastEdge, nullptr, &fFirstEdge, &fLastEdge); | 370 edge, fLastEdge, nullptr, &fFirstEdge, &fLastEdge); |
| 375 edge->fUsedInLeftPoly = true; | 371 edge->fUsedInLeftPoly = true; |
| 376 } | 372 } |
| 377 } | 373 } |
| 378 | 374 |
| 379 SkPoint* emit(SkPoint* data) { | 375 SkPoint* emit(SkPoint* data) { |
| 380 Edge* e = fFirstEdge; | 376 Edge* e = fFirstEdge; |
| 381 e->fTop->fPrev = e->fTop->fNext = nullptr; | 377 e->fTop->fPrev = e->fTop->fNext = nullptr; |
| 382 VertexList vertices; | 378 VertexList vertices; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 } | 412 } |
| 417 } | 413 } |
| 418 return data; | 414 return data; |
| 419 } | 415 } |
| 420 }; | 416 }; |
| 421 Poly* addEdge(Edge* e, Side side, SkChunkAlloc& alloc) { | 417 Poly* addEdge(Edge* e, Side side, SkChunkAlloc& alloc) { |
| 422 LOG("addEdge (%g -> %g) to poly %d, %s side\n", | 418 LOG("addEdge (%g -> %g) to poly %d, %s side\n", |
| 423 e->fTop->fID, e->fBottom->fID, fID, side == kLeft_Side ? "left" :
"right"); | 419 e->fTop->fID, e->fBottom->fID, fID, side == kLeft_Side ? "left" :
"right"); |
| 424 Poly* partner = fPartner; | 420 Poly* partner = fPartner; |
| 425 Poly* poly = this; | 421 Poly* poly = this; |
| 422 if (side == kRight_Side) { |
| 423 if (e->fUsedInRightPoly) { |
| 424 return this; |
| 425 } |
| 426 } else { |
| 427 if (e->fUsedInLeftPoly) { |
| 428 return this; |
| 429 } |
| 430 } |
| 426 if (partner) { | 431 if (partner) { |
| 427 fPartner = partner->fPartner = nullptr; | 432 fPartner = partner->fPartner = nullptr; |
| 428 } | 433 } |
| 429 if (!fTail) { | 434 if (!fTail) { |
| 430 fHead = fTail = ALLOC_NEW(MonotonePoly, (e, side), alloc); | 435 fHead = fTail = ALLOC_NEW(MonotonePoly, (e, side), alloc); |
| 431 fCount += 2; | 436 fCount += 2; |
| 432 } else if (e->fBottom == fTail->fLastEdge->fBottom) { | 437 } else if (e->fBottom == fTail->fLastEdge->fBottom) { |
| 433 return poly; | 438 return poly; |
| 434 } else if (side == fTail->fSide) { | 439 } else if (side == fTail->fSide) { |
| 435 fTail->addEdge(e); | 440 fTail->addEdge(e); |
| (...skipping 1015 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1451 } | 1456 } |
| 1452 } | 1457 } |
| 1453 int actualCount = static_cast<int>(vertsEnd - *verts); | 1458 int actualCount = static_cast<int>(vertsEnd - *verts); |
| 1454 SkASSERT(actualCount <= count); | 1459 SkASSERT(actualCount <= count); |
| 1455 SkASSERT(pointsEnd - points == actualCount); | 1460 SkASSERT(pointsEnd - points == actualCount); |
| 1456 delete[] points; | 1461 delete[] points; |
| 1457 return actualCount; | 1462 return actualCount; |
| 1458 } | 1463 } |
| 1459 | 1464 |
| 1460 } // namespace | 1465 } // namespace |
| OLD | NEW |