Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "GrAAConvexPathRenderer.h" | 9 #include "GrAAConvexPathRenderer.h" |
| 10 | 10 |
| (...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 418 verts[*v + 2].fUV.set(0, 0); | 418 verts[*v + 2].fUV.set(0, 0); |
| 419 verts[*v + 3].fUV.set(0, -SK_Scalar1); | 419 verts[*v + 3].fUV.set(0, -SK_Scalar1); |
| 420 verts[*v + 4].fUV.set(0, -SK_Scalar1); | 420 verts[*v + 4].fUV.set(0, -SK_Scalar1); |
| 421 | 421 |
| 422 verts[*v + 0].fD0 = verts[*v + 0].fD1 = -SK_Scalar1; | 422 verts[*v + 0].fD0 = verts[*v + 0].fD1 = -SK_Scalar1; |
| 423 verts[*v + 1].fD0 = verts[*v + 1].fD1 = -SK_Scalar1; | 423 verts[*v + 1].fD0 = verts[*v + 1].fD1 = -SK_Scalar1; |
| 424 verts[*v + 2].fD0 = verts[*v + 2].fD1 = -SK_Scalar1; | 424 verts[*v + 2].fD0 = verts[*v + 2].fD1 = -SK_Scalar1; |
| 425 verts[*v + 3].fD0 = verts[*v + 3].fD1 = -SK_Scalar1; | 425 verts[*v + 3].fD0 = verts[*v + 3].fD1 = -SK_Scalar1; |
| 426 verts[*v + 4].fD0 = verts[*v + 4].fD1 = -SK_Scalar1; | 426 verts[*v + 4].fD0 = verts[*v + 4].fD1 = -SK_Scalar1; |
| 427 | 427 |
| 428 idxs[*i + 0] = *v + 0; | 428 idxs[*i + 0] = *v + 3; |
| 429 idxs[*i + 1] = *v + 2; | 429 idxs[*i + 1] = *v + 1; |
| 430 idxs[*i + 2] = *v + 1; | 430 idxs[*i + 2] = *v + 2; |
| 431 | 431 |
| 432 idxs[*i + 3] = *v + 3; | 432 idxs[*i + 3] = *v + 4; |
| 433 idxs[*i + 4] = *v + 1; | 433 idxs[*i + 4] = *v + 3; |
| 434 idxs[*i + 5] = *v + 2; | 434 idxs[*i + 5] = *v + 2; |
| 435 | 435 |
| 436 idxs[*i + 6] = *v + 4; | 436 *i += 6; |
| 437 idxs[*i + 7] = *v + 3; | 437 |
| 438 idxs[*i + 8] = *v + 2; | 438 // Draw the interior fan if it exists. |
| 439 // TODO: Detect and combine colinear segments. This will ensure we c atch every case | |
| 440 // with no interior, and that the resulting shared edge uses the sam e endpoints. | |
| 441 if (count >= 3) { | |
| 442 idxs[*i + 0] = *v + 0; | |
| 443 idxs[*i + 1] = *v + 2; | |
| 444 idxs[*i + 2] = *v + 1; | |
| 445 | |
| 446 *i += 3; | |
| 447 } | |
| 439 | 448 |
| 440 *v += 5; | 449 *v += 5; |
| 441 *i += 9; | |
| 442 } else { | 450 } else { |
| 443 SkPoint qpts[] = {sega.endPt(), segb.fPts[0], segb.fPts[1]}; | 451 SkPoint qpts[] = {sega.endPt(), segb.fPts[0], segb.fPts[1]}; |
| 444 | 452 |
| 445 SkVector midVec = segb.fNorms[0] + segb.fNorms[1]; | 453 SkVector midVec = segb.fNorms[0] + segb.fNorms[1]; |
| 446 midVec.normalize(); | 454 midVec.normalize(); |
| 447 | 455 |
| 448 verts[*v + 0].fPos = fanPt; | 456 verts[*v + 0].fPos = fanPt; |
| 449 verts[*v + 1].fPos = qpts[0]; | 457 verts[*v + 1].fPos = qpts[0]; |
| 450 verts[*v + 2].fPos = qpts[2]; | 458 verts[*v + 2].fPos = qpts[2]; |
| 451 verts[*v + 3].fPos = qpts[0] + segb.fNorms[0]; | 459 verts[*v + 3].fPos = qpts[0] + segb.fNorms[0]; |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 475 idxs[*i + 1] = *v + 1; | 483 idxs[*i + 1] = *v + 1; |
| 476 idxs[*i + 2] = *v + 2; | 484 idxs[*i + 2] = *v + 2; |
| 477 idxs[*i + 3] = *v + 4; | 485 idxs[*i + 3] = *v + 4; |
| 478 idxs[*i + 4] = *v + 3; | 486 idxs[*i + 4] = *v + 3; |
| 479 idxs[*i + 5] = *v + 2; | 487 idxs[*i + 5] = *v + 2; |
| 480 | 488 |
| 481 idxs[*i + 6] = *v + 5; | 489 idxs[*i + 6] = *v + 5; |
| 482 idxs[*i + 7] = *v + 3; | 490 idxs[*i + 7] = *v + 3; |
| 483 idxs[*i + 8] = *v + 4; | 491 idxs[*i + 8] = *v + 4; |
| 484 | 492 |
| 485 idxs[*i + 9] = *v + 0; | 493 *i += 9; |
| 486 idxs[*i + 10] = *v + 2; | 494 |
| 487 idxs[*i + 11] = *v + 1; | 495 // Draw the interior fan if it exists. |
| 496 // TODO: Detect and combine colinear segments. This will ensure we c atch every case | |
| 497 // with no interior, and that the resulting shared edge uses the sam e endpoints. | |
| 498 if (count >= 3) { | |
|
Chris Dalton
2015/04/29 16:38:04
I decided to err on the side of minimal code chang
| |
| 499 idxs[*i + 0] = *v + 0; | |
| 500 idxs[*i + 1] = *v + 2; | |
| 501 idxs[*i + 2] = *v + 1; | |
| 502 | |
| 503 *i += 3; | |
| 504 } | |
| 488 | 505 |
| 489 *v += 6; | 506 *v += 6; |
| 490 *i += 12; | |
| 491 } | 507 } |
| 492 } | 508 } |
| 493 } | 509 } |
| 494 | 510 |
| 495 /////////////////////////////////////////////////////////////////////////////// | 511 /////////////////////////////////////////////////////////////////////////////// |
| 496 | 512 |
| 497 /* | 513 /* |
| 498 * Quadratic specified by 0=u^2-v canonical coords. u and v are the first | 514 * Quadratic specified by 0=u^2-v canonical coords. u and v are the first |
| 499 * two components of the vertex attribute. Coverage is based on signed | 515 * two components of the vertex attribute. Coverage is based on signed |
| 500 * distance with negative being inside, positive outside. The edge is specified in | 516 * distance with negative being inside, positive outside. The edge is specified in |
| (...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 885 geometry.fColor = color; | 901 geometry.fColor = color; |
| 886 geometry.fViewMatrix = vm; | 902 geometry.fViewMatrix = vm; |
| 887 geometry.fPath = path; | 903 geometry.fPath = path; |
| 888 | 904 |
| 889 SkAutoTUnref<GrBatch> batch(AAConvexPathBatch::Create(geometry)); | 905 SkAutoTUnref<GrBatch> batch(AAConvexPathBatch::Create(geometry)); |
| 890 target->drawBatch(pipelineBuilder, batch, &devRect); | 906 target->drawBatch(pipelineBuilder, batch, &devRect); |
| 891 | 907 |
| 892 return true; | 908 return true; |
| 893 | 909 |
| 894 } | 910 } |
| OLD | NEW |