Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2013 Google Inc. | 3 * Copyright 2013 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 // This test only works with the GPU backend. | 9 // This test only works with the GPU backend. |
| 10 | 10 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 57 struct Vertex { | 57 struct Vertex { |
| 58 SkPoint fPosition; | 58 SkPoint fPosition; |
| 59 float fKLM[4]; // The last value is ignored. The effect expects a vec4 f. | 59 float fKLM[4]; // The last value is ignored. The effect expects a vec4 f. |
| 60 }; | 60 }; |
| 61 | 61 |
| 62 Geometry* geoData(int index) override { | 62 Geometry* geoData(int index) override { |
| 63 SkASSERT(0 == index); | 63 SkASSERT(0 == index); |
| 64 return &fGeometry; | 64 return &fGeometry; |
| 65 } | 65 } |
| 66 | 66 |
| 67 const Geometry* geoData(int index) const override { | |
| 68 SkASSERT(0 == index); | |
| 69 return &fGeometry; | |
| 70 } | |
| 71 | |
| 67 void onGenerateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeli ne) override { | 72 void onGenerateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeli ne) override { |
| 68 QuadHelper helper; | 73 QuadHelper helper; |
| 69 size_t vertexStride = this->geometryProcessor()->getVertexStride(); | 74 size_t vertexStride = this->geometryProcessor()->getVertexStride(); |
| 70 SkASSERT(vertexStride == sizeof(Vertex)); | 75 SkASSERT(vertexStride == sizeof(Vertex)); |
| 71 Vertex* verts = reinterpret_cast<Vertex*>(helper.init(batchTarget, verte xStride, 1)); | 76 Vertex* verts = reinterpret_cast<Vertex*>(helper.init(batchTarget, verte xStride, 1)); |
| 72 if (!verts) { | 77 if (!verts) { |
| 73 return; | 78 return; |
| 74 } | 79 } |
| 75 | 80 |
| 76 verts[0].fPosition.setRectFan(fGeometry.fBounds.fLeft, fGeometry.fBounds .fTop, | 81 verts[0].fPosition.setRectFan(fGeometry.fBounds.fLeft, fGeometry.fBounds .fTop, |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 130 | 135 |
| 131 static const int kNumCubics = 15; | 136 static const int kNumCubics = 15; |
| 132 SkRandom rand; | 137 SkRandom rand; |
| 133 | 138 |
| 134 // Mult by 3 for each edge effect type | 139 // Mult by 3 for each edge effect type |
| 135 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumCubics*3) )); | 140 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumCubics*3) )); |
| 136 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumCubics*3) / numCols); | 141 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumCubics*3) / numCols); |
| 137 SkScalar w = SkIntToScalar(rt->width()) / numCols; | 142 SkScalar w = SkIntToScalar(rt->width()) / numCols; |
| 138 SkScalar h = SkIntToScalar(rt->height()) / numRows; | 143 SkScalar h = SkIntToScalar(rt->height()) / numRows; |
| 139 int row = 0; | 144 int row = 0; |
| 140 int col = 0; | 145 int col = 0; |
|
robertphillips
2015/05/13 20:33:50
Use SK_ColorBLACK ?
| |
| 146 static const GrColor color = 0xff000000; | |
| 141 | 147 |
| 142 for (int i = 0; i < kNumCubics; ++i) { | 148 for (int i = 0; i < kNumCubics; ++i) { |
| 143 SkPoint baseControlPts[] = { | 149 SkPoint baseControlPts[] = { |
| 144 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 150 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 145 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 151 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 146 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 152 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 147 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} | 153 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} |
| 148 }; | 154 }; |
| 149 for(int edgeType = 0; edgeType < kGrProcessorEdgeTypeCnt; ++edgeType ) { | 155 for(int edgeType = 0; edgeType < kGrProcessorEdgeTypeCnt; ++edgeType ) { |
| 150 SkAutoTUnref<GrGeometryProcessor> gp; | 156 SkAutoTUnref<GrGeometryProcessor> gp; |
| 151 { // scope to contain GrTestTarget | 157 { // scope to contain GrTestTarget |
| 152 GrTestTarget tt; | 158 GrTestTarget tt; |
| 153 context->getTestTarget(&tt); | 159 context->getTestTarget(&tt); |
| 154 if (NULL == tt.target()) { | 160 if (NULL == tt.target()) { |
| 155 continue; | 161 continue; |
| 156 } | 162 } |
| 157 GrPrimitiveEdgeType et = (GrPrimitiveEdgeType)edgeType; | 163 GrPrimitiveEdgeType et = (GrPrimitiveEdgeType)edgeType; |
| 158 gp.reset(GrCubicEffect::Create(0xff000000, SkMatrix::I(), et , | 164 gp.reset(GrCubicEffect::Create(color, SkMatrix::I(), et, |
| 159 *tt.target()->caps())); | 165 *tt.target()->caps())); |
| 160 if (!gp) { | 166 if (!gp) { |
| 161 continue; | 167 continue; |
| 162 } | 168 } |
| 163 } | 169 } |
| 164 | 170 |
| 165 SkScalar x = SkScalarMul(col, w); | 171 SkScalar x = SkScalarMul(col, w); |
| 166 SkScalar y = SkScalarMul(row, h); | 172 SkScalar y = SkScalarMul(row, h); |
| 167 SkPoint controlPts[] = { | 173 SkPoint controlPts[] = { |
| 168 {x + baseControlPts[0].fX, y + baseControlPts[0].fY}, | 174 {x + baseControlPts[0].fX, y + baseControlPts[0].fY}, |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 210 canvas->drawRect(bounds, boundsPaint); | 216 canvas->drawRect(bounds, boundsPaint); |
| 211 | 217 |
| 212 GrTestTarget tt; | 218 GrTestTarget tt; |
| 213 context->getTestTarget(&tt); | 219 context->getTestTarget(&tt); |
| 214 SkASSERT(tt.target()); | 220 SkASSERT(tt.target()); |
| 215 | 221 |
| 216 GrPipelineBuilder pipelineBuilder; | 222 GrPipelineBuilder pipelineBuilder; |
| 217 pipelineBuilder.setRenderTarget(rt); | 223 pipelineBuilder.setRenderTarget(rt); |
| 218 | 224 |
| 219 BezierCubicOrConicTestBatch::Geometry geometry; | 225 BezierCubicOrConicTestBatch::Geometry geometry; |
| 220 geometry.fColor = gp->color(); | 226 geometry.fColor = color; |
| 221 geometry.fBounds = bounds; | 227 geometry.fBounds = bounds; |
| 222 | 228 |
| 223 SkAutoTUnref<GrBatch> batch( | 229 SkAutoTUnref<GrBatch> batch( |
| 224 BezierCubicOrConicTestBatch::Create(gp, geometry, kl mEqs, klmSigns[c])); | 230 BezierCubicOrConicTestBatch::Create(gp, geometry, kl mEqs, klmSigns[c])); |
| 225 | 231 |
| 226 tt.target()->drawBatch(&pipelineBuilder, batch); | 232 tt.target()->drawBatch(&pipelineBuilder, batch); |
| 227 } | 233 } |
| 228 ++col; | 234 ++col; |
| 229 if (numCols == col) { | 235 if (numCols == col) { |
| 230 col = 0; | 236 col = 0; |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 277 | 283 |
| 278 static const int kNumConics = 10; | 284 static const int kNumConics = 10; |
| 279 SkRandom rand; | 285 SkRandom rand; |
| 280 | 286 |
| 281 // Mult by 3 for each edge effect type | 287 // Mult by 3 for each edge effect type |
| 282 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumConics*3) )); | 288 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumConics*3) )); |
| 283 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumConics*3) / numCols); | 289 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumConics*3) / numCols); |
| 284 SkScalar w = SkIntToScalar(rt->width()) / numCols; | 290 SkScalar w = SkIntToScalar(rt->width()) / numCols; |
| 285 SkScalar h = SkIntToScalar(rt->height()) / numRows; | 291 SkScalar h = SkIntToScalar(rt->height()) / numRows; |
| 286 int row = 0; | 292 int row = 0; |
| 287 int col = 0; | 293 int col = 0; |
|
robertphillips
2015/05/13 20:33:50
ditto ?
| |
| 294 static const GrColor color = 0xff000000; | |
| 288 | 295 |
| 289 for (int i = 0; i < kNumConics; ++i) { | 296 for (int i = 0; i < kNumConics; ++i) { |
| 290 SkPoint baseControlPts[] = { | 297 SkPoint baseControlPts[] = { |
| 291 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 298 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 292 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 299 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 293 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} | 300 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} |
| 294 }; | 301 }; |
| 295 SkScalar weight = rand.nextRangeF(0.f, 2.f); | 302 SkScalar weight = rand.nextRangeF(0.f, 2.f); |
| 296 for(int edgeType = 0; edgeType < kGrProcessorEdgeTypeCnt; ++edgeType ) { | 303 for(int edgeType = 0; edgeType < kGrProcessorEdgeTypeCnt; ++edgeType ) { |
| 297 SkAutoTUnref<GrGeometryProcessor> gp; | 304 SkAutoTUnref<GrGeometryProcessor> gp; |
| 298 { // scope to contain GrTestTarget | 305 { // scope to contain GrTestTarget |
| 299 GrTestTarget tt; | 306 GrTestTarget tt; |
| 300 context->getTestTarget(&tt); | 307 context->getTestTarget(&tt); |
| 301 if (NULL == tt.target()) { | 308 if (NULL == tt.target()) { |
| 302 continue; | 309 continue; |
| 303 } | 310 } |
| 304 GrPrimitiveEdgeType et = (GrPrimitiveEdgeType)edgeType; | 311 GrPrimitiveEdgeType et = (GrPrimitiveEdgeType)edgeType; |
| 305 gp.reset(GrConicEffect::Create(0xff000000, SkMatrix::I(), et , | 312 gp.reset(GrConicEffect::Create(color, SkMatrix::I(), et, |
| 306 *tt.target()->caps(), SkMatri x::I())); | 313 *tt.target()->caps(), SkMatri x::I())); |
| 307 if (!gp) { | 314 if (!gp) { |
| 308 continue; | 315 continue; |
| 309 } | 316 } |
| 310 } | 317 } |
| 311 | 318 |
| 312 SkScalar x = SkScalarMul(col, w); | 319 SkScalar x = SkScalarMul(col, w); |
| 313 SkScalar y = SkScalarMul(row, h); | 320 SkScalar y = SkScalarMul(row, h); |
| 314 SkPoint controlPts[] = { | 321 SkPoint controlPts[] = { |
| 315 {x + baseControlPts[0].fX, y + baseControlPts[0].fY}, | 322 {x + baseControlPts[0].fX, y + baseControlPts[0].fY}, |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 354 canvas->drawRect(bounds, boundsPaint); | 361 canvas->drawRect(bounds, boundsPaint); |
| 355 | 362 |
| 356 GrTestTarget tt; | 363 GrTestTarget tt; |
| 357 context->getTestTarget(&tt); | 364 context->getTestTarget(&tt); |
| 358 SkASSERT(tt.target()); | 365 SkASSERT(tt.target()); |
| 359 | 366 |
| 360 GrPipelineBuilder pipelineBuilder; | 367 GrPipelineBuilder pipelineBuilder; |
| 361 pipelineBuilder.setRenderTarget(rt); | 368 pipelineBuilder.setRenderTarget(rt); |
| 362 | 369 |
| 363 BezierCubicOrConicTestBatch::Geometry geometry; | 370 BezierCubicOrConicTestBatch::Geometry geometry; |
| 364 geometry.fColor = gp->color(); | 371 geometry.fColor = color; |
| 365 geometry.fBounds = bounds; | 372 geometry.fBounds = bounds; |
| 366 | 373 |
| 367 SkAutoTUnref<GrBatch> batch( | 374 SkAutoTUnref<GrBatch> batch( |
| 368 BezierCubicOrConicTestBatch::Create(gp, geometry, kl mEqs, 1.f)); | 375 BezierCubicOrConicTestBatch::Create(gp, geometry, kl mEqs, 1.f)); |
| 369 | 376 |
| 370 tt.target()->drawBatch(&pipelineBuilder, batch); | 377 tt.target()->drawBatch(&pipelineBuilder, batch); |
| 371 } | 378 } |
| 372 ++col; | 379 ++col; |
| 373 if (numCols == col) { | 380 if (numCols == col) { |
| 374 col = 0; | 381 col = 0; |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 445 struct Vertex { | 452 struct Vertex { |
| 446 SkPoint fPosition; | 453 SkPoint fPosition; |
| 447 float fKLM[4]; // The last value is ignored. The effect expects a vec4 f. | 454 float fKLM[4]; // The last value is ignored. The effect expects a vec4 f. |
| 448 }; | 455 }; |
| 449 | 456 |
| 450 Geometry* geoData(int index) override { | 457 Geometry* geoData(int index) override { |
| 451 SkASSERT(0 == index); | 458 SkASSERT(0 == index); |
| 452 return &fGeometry; | 459 return &fGeometry; |
| 453 } | 460 } |
| 454 | 461 |
| 462 const Geometry* geoData(int index) const override { | |
| 463 SkASSERT(0 == index); | |
| 464 return &fGeometry; | |
| 465 } | |
| 466 | |
| 455 void onGenerateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeli ne) override { | 467 void onGenerateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeli ne) override { |
| 456 QuadHelper helper; | 468 QuadHelper helper; |
| 457 size_t vertexStride = this->geometryProcessor()->getVertexStride(); | 469 size_t vertexStride = this->geometryProcessor()->getVertexStride(); |
| 458 SkASSERT(vertexStride == sizeof(Vertex)); | 470 SkASSERT(vertexStride == sizeof(Vertex)); |
| 459 Vertex* verts = reinterpret_cast<Vertex*>(helper.init(batchTarget, verte xStride, 1)); | 471 Vertex* verts = reinterpret_cast<Vertex*>(helper.init(batchTarget, verte xStride, 1)); |
| 460 if (!verts) { | 472 if (!verts) { |
| 461 return; | 473 return; |
| 462 } | 474 } |
| 463 verts[0].fPosition.setRectFan(fGeometry.fBounds.fLeft, fGeometry.fBounds .fTop, | 475 verts[0].fPosition.setRectFan(fGeometry.fBounds.fLeft, fGeometry.fBounds .fTop, |
| 464 fGeometry.fBounds.fRight, fGeometry.fBound s.fBottom, | 476 fGeometry.fBounds.fRight, fGeometry.fBound s.fBottom, |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 512 }; | 524 }; |
| 513 | 525 |
| 514 static const int kNumQuads = 5; | 526 static const int kNumQuads = 5; |
| 515 SkRandom rand; | 527 SkRandom rand; |
| 516 | 528 |
| 517 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumQuads*3)) ); | 529 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumQuads*3)) ); |
| 518 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumQuads*3) / numCols); | 530 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumQuads*3) / numCols); |
| 519 SkScalar w = SkIntToScalar(rt->width()) / numCols; | 531 SkScalar w = SkIntToScalar(rt->width()) / numCols; |
| 520 SkScalar h = SkIntToScalar(rt->height()) / numRows; | 532 SkScalar h = SkIntToScalar(rt->height()) / numRows; |
| 521 int row = 0; | 533 int row = 0; |
| 522 int col = 0; | 534 int col = 0; |
|
robertphillips
2015/05/13 20:33:50
here too ?
| |
| 535 static const GrColor color = 0xff000000; | |
| 523 | 536 |
| 524 for (int i = 0; i < kNumQuads; ++i) { | 537 for (int i = 0; i < kNumQuads; ++i) { |
| 525 SkPoint baseControlPts[] = { | 538 SkPoint baseControlPts[] = { |
| 526 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 539 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 527 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 540 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 528 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} | 541 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} |
| 529 }; | 542 }; |
| 530 for(int edgeType = 0; edgeType < kGrProcessorEdgeTypeCnt; ++edgeType ) { | 543 for(int edgeType = 0; edgeType < kGrProcessorEdgeTypeCnt; ++edgeType ) { |
| 531 SkAutoTUnref<GrGeometryProcessor> gp; | 544 SkAutoTUnref<GrGeometryProcessor> gp; |
| 532 { // scope to contain GrTestTarget | 545 { // scope to contain GrTestTarget |
| 533 GrTestTarget tt; | 546 GrTestTarget tt; |
| 534 context->getTestTarget(&tt); | 547 context->getTestTarget(&tt); |
| 535 if (NULL == tt.target()) { | 548 if (NULL == tt.target()) { |
| 536 continue; | 549 continue; |
| 537 } | 550 } |
| 538 GrPrimitiveEdgeType et = (GrPrimitiveEdgeType)edgeType; | 551 GrPrimitiveEdgeType et = (GrPrimitiveEdgeType)edgeType; |
| 539 gp.reset(GrQuadEffect::Create(0xff000000, SkMatrix::I(), et, | 552 gp.reset(GrQuadEffect::Create(color, SkMatrix::I(), et, |
| 540 *tt.target()->caps(), SkMatrix ::I())); | 553 *tt.target()->caps(), SkMatrix ::I())); |
| 541 if (!gp) { | 554 if (!gp) { |
| 542 continue; | 555 continue; |
| 543 } | 556 } |
| 544 } | 557 } |
| 545 | 558 |
| 546 SkScalar x = SkScalarMul(col, w); | 559 SkScalar x = SkScalarMul(col, w); |
| 547 SkScalar y = SkScalarMul(row, h); | 560 SkScalar y = SkScalarMul(row, h); |
| 548 SkPoint controlPts[] = { | 561 SkPoint controlPts[] = { |
| 549 {x + baseControlPts[0].fX, y + baseControlPts[0].fY}, | 562 {x + baseControlPts[0].fX, y + baseControlPts[0].fY}, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 587 GrTestTarget tt; | 600 GrTestTarget tt; |
| 588 context->getTestTarget(&tt); | 601 context->getTestTarget(&tt); |
| 589 SkASSERT(tt.target()); | 602 SkASSERT(tt.target()); |
| 590 | 603 |
| 591 GrPipelineBuilder pipelineBuilder; | 604 GrPipelineBuilder pipelineBuilder; |
| 592 pipelineBuilder.setRenderTarget(rt); | 605 pipelineBuilder.setRenderTarget(rt); |
| 593 | 606 |
| 594 GrPathUtils::QuadUVMatrix DevToUV(pts); | 607 GrPathUtils::QuadUVMatrix DevToUV(pts); |
| 595 | 608 |
| 596 BezierQuadTestBatch::Geometry geometry; | 609 BezierQuadTestBatch::Geometry geometry; |
| 597 geometry.fColor = gp->color(); | 610 geometry.fColor = color; |
| 598 geometry.fBounds = bounds; | 611 geometry.fBounds = bounds; |
| 599 | 612 |
| 600 SkAutoTUnref<GrBatch> batch(BezierQuadTestBatch::Create(gp, geometry, DevToUV)); | 613 SkAutoTUnref<GrBatch> batch(BezierQuadTestBatch::Create(gp, geometry, DevToUV)); |
| 601 | 614 |
| 602 tt.target()->drawBatch(&pipelineBuilder, batch); | 615 tt.target()->drawBatch(&pipelineBuilder, batch); |
| 603 } | 616 } |
| 604 ++col; | 617 ++col; |
| 605 if (numCols == col) { | 618 if (numCols == col) { |
| 606 col = 0; | 619 col = 0; |
| 607 ++row; | 620 ++row; |
| 608 } | 621 } |
| 609 } | 622 } |
| 610 } | 623 } |
| 611 } | 624 } |
| 612 | 625 |
| 613 private: | 626 private: |
| 614 typedef GM INHERITED; | 627 typedef GM INHERITED; |
| 615 }; | 628 }; |
| 616 | 629 |
| 617 DEF_GM( return SkNEW(BezierCubicEffects); ) | 630 DEF_GM( return SkNEW(BezierCubicEffects); ) |
| 618 DEF_GM( return SkNEW(BezierConicEffects); ) | 631 DEF_GM( return SkNEW(BezierConicEffects); ) |
| 619 DEF_GM( return SkNEW(BezierQuadEffects); ) | 632 DEF_GM( return SkNEW(BezierQuadEffects); ) |
| 620 | 633 |
| 621 } | 634 } |
| 622 | 635 |
| 623 #endif | 636 #endif |
| OLD | NEW |