| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 // This test only works with the GPU backend. | 8 // This test only works with the GPU backend. |
| 9 | 9 |
| 10 #include "gm.h" | 10 #include "gm.h" |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 protected: | 92 protected: |
| 93 SkString onShortName() override { | 93 SkString onShortName() override { |
| 94 return SkString("bezier_cubic_effects"); | 94 return SkString("bezier_cubic_effects"); |
| 95 } | 95 } |
| 96 | 96 |
| 97 SkISize onISize() override { | 97 SkISize onISize() override { |
| 98 return SkISize::Make(800, 800); | 98 return SkISize::Make(800, 800); |
| 99 } | 99 } |
| 100 | 100 |
| 101 void onDraw(SkCanvas* canvas) override { | 101 void onDraw(SkCanvas* canvas) override { |
| 102 GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget
(); | 102 GrDrawContext* drawContext = canvas->internal_private_accessTopLayerDraw
Context(); |
| 103 if (nullptr == rt) { | 103 if (!drawContext) { |
| 104 skiagm::GM::DrawGpuOnlyMessage(canvas); | 104 skiagm::GM::DrawGpuOnlyMessage(canvas); |
| 105 return; | 105 return; |
| 106 } | 106 } |
| 107 GrContext* context = rt->getContext(); | 107 |
| 108 if (nullptr == context) { | 108 GrContext* context = canvas->getGrContext(); |
| 109 if (!context) { |
| 109 return; | 110 return; |
| 110 } | 111 } |
| 111 | 112 |
| 112 sk_sp<GrDrawContext> drawContext(context->drawContext(sk_ref_sp(rt))); | |
| 113 if (!drawContext) { | |
| 114 return; | |
| 115 } | |
| 116 | |
| 117 struct Vertex { | 113 struct Vertex { |
| 118 SkPoint fPosition; | 114 SkPoint fPosition; |
| 119 float fKLM[4]; // The last value is ignored. The effect expects a
vec4f. | 115 float fKLM[4]; // The last value is ignored. The effect expects a
vec4f. |
| 120 }; | 116 }; |
| 121 | 117 |
| 122 static const int kNumCubics = 15; | 118 static const int kNumCubics = 15; |
| 123 SkRandom rand; | 119 SkRandom rand; |
| 124 | 120 |
| 125 // Mult by 3 for each edge effect type | 121 // Mult by 3 for each edge effect type |
| 126 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumCubics*3)
)); | 122 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumCubics*3)
)); |
| 127 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumCubics*3) / numCols); | 123 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumCubics*3) / numCols); |
| 128 SkScalar w = SkIntToScalar(rt->width()) / numCols; | 124 SkScalar w = SkIntToScalar(drawContext->width()) / numCols; |
| 129 SkScalar h = SkIntToScalar(rt->height()) / numRows; | 125 SkScalar h = SkIntToScalar(drawContext->height()) / numRows; |
| 130 int row = 0; | 126 int row = 0; |
| 131 int col = 0; | 127 int col = 0; |
| 132 static const GrColor color = 0xff000000; | 128 static const GrColor color = 0xff000000; |
| 133 | 129 |
| 134 for (int i = 0; i < kNumCubics; ++i) { | 130 for (int i = 0; i < kNumCubics; ++i) { |
| 135 SkPoint baseControlPts[] = { | 131 SkPoint baseControlPts[] = { |
| 136 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 132 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 137 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 133 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 138 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 134 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 139 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} | 135 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 | 185 |
| 190 SkPaint boundsPaint; | 186 SkPaint boundsPaint; |
| 191 boundsPaint.setColor(0xff808080); | 187 boundsPaint.setColor(0xff808080); |
| 192 boundsPaint.setStrokeWidth(0); | 188 boundsPaint.setStrokeWidth(0); |
| 193 boundsPaint.setStyle(SkPaint::kStroke_Style); | 189 boundsPaint.setStyle(SkPaint::kStroke_Style); |
| 194 canvas->drawRect(bounds, boundsPaint); | 190 canvas->drawRect(bounds, boundsPaint); |
| 195 | 191 |
| 196 GrPipelineBuilder pipelineBuilder; | 192 GrPipelineBuilder pipelineBuilder; |
| 197 pipelineBuilder.setXPFactory( | 193 pipelineBuilder.setXPFactory( |
| 198 GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->u
nref(); | 194 GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->u
nref(); |
| 199 pipelineBuilder.setRenderTarget(rt); | 195 pipelineBuilder.setRenderTarget(drawContext->accessRenderTar
get()); |
| 200 | 196 |
| 201 SkAutoTUnref<GrDrawBatch> batch( | 197 SkAutoTUnref<GrDrawBatch> batch( |
| 202 new BezierCubicOrConicTestBatch(gp, bounds, color, klmEq
s, klmSigns[c])); | 198 new BezierCubicOrConicTestBatch(gp, bounds, color, klmEq
s, klmSigns[c])); |
| 203 | 199 |
| 204 drawContext->drawContextPriv().testingOnly_drawBatch(pipelin
eBuilder, batch); | 200 drawContext->drawContextPriv().testingOnly_drawBatch(pipelin
eBuilder, batch); |
| 205 } | 201 } |
| 206 ++col; | 202 ++col; |
| 207 if (numCols == col) { | 203 if (numCols == col) { |
| 208 col = 0; | 204 col = 0; |
| 209 ++row; | 205 ++row; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 231 SkString onShortName() override { | 227 SkString onShortName() override { |
| 232 return SkString("bezier_conic_effects"); | 228 return SkString("bezier_conic_effects"); |
| 233 } | 229 } |
| 234 | 230 |
| 235 SkISize onISize() override { | 231 SkISize onISize() override { |
| 236 return SkISize::Make(800, 800); | 232 return SkISize::Make(800, 800); |
| 237 } | 233 } |
| 238 | 234 |
| 239 | 235 |
| 240 void onDraw(SkCanvas* canvas) override { | 236 void onDraw(SkCanvas* canvas) override { |
| 241 GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget
(); | 237 GrDrawContext* drawContext = canvas->internal_private_accessTopLayerDraw
Context(); |
| 242 if (nullptr == rt) { | 238 if (!drawContext) { |
| 243 skiagm::GM::DrawGpuOnlyMessage(canvas); | 239 skiagm::GM::DrawGpuOnlyMessage(canvas); |
| 244 return; | 240 return; |
| 245 } | 241 } |
| 246 GrContext* context = rt->getContext(); | 242 |
| 247 if (nullptr == context) { | 243 GrContext* context = canvas->getGrContext(); |
| 244 if (!context) { |
| 248 return; | 245 return; |
| 249 } | 246 } |
| 250 | 247 |
| 251 sk_sp<GrDrawContext> drawContext(context->drawContext(sk_ref_sp(rt))); | |
| 252 if (!drawContext) { | |
| 253 return; | |
| 254 } | |
| 255 | |
| 256 struct Vertex { | 248 struct Vertex { |
| 257 SkPoint fPosition; | 249 SkPoint fPosition; |
| 258 float fKLM[4]; // The last value is ignored. The effect expects a
vec4f. | 250 float fKLM[4]; // The last value is ignored. The effect expects a
vec4f. |
| 259 }; | 251 }; |
| 260 | 252 |
| 261 static const int kNumConics = 10; | 253 static const int kNumConics = 10; |
| 262 SkRandom rand; | 254 SkRandom rand; |
| 263 | 255 |
| 264 // Mult by 3 for each edge effect type | 256 // Mult by 3 for each edge effect type |
| 265 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumConics*3)
)); | 257 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumConics*3)
)); |
| 266 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumConics*3) / numCols); | 258 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumConics*3) / numCols); |
| 267 SkScalar w = SkIntToScalar(rt->width()) / numCols; | 259 SkScalar w = SkIntToScalar(drawContext->width()) / numCols; |
| 268 SkScalar h = SkIntToScalar(rt->height()) / numRows; | 260 SkScalar h = SkIntToScalar(drawContext->height()) / numRows; |
| 269 int row = 0; | 261 int row = 0; |
| 270 int col = 0; | 262 int col = 0; |
| 271 static const GrColor color = 0xff000000; | 263 static const GrColor color = 0xff000000; |
| 272 | 264 |
| 273 for (int i = 0; i < kNumConics; ++i) { | 265 for (int i = 0; i < kNumConics; ++i) { |
| 274 SkPoint baseControlPts[] = { | 266 SkPoint baseControlPts[] = { |
| 275 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 267 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 276 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 268 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 277 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} | 269 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} |
| 278 }; | 270 }; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 | 318 |
| 327 SkPaint boundsPaint; | 319 SkPaint boundsPaint; |
| 328 boundsPaint.setColor(0xff808080); | 320 boundsPaint.setColor(0xff808080); |
| 329 boundsPaint.setStrokeWidth(0); | 321 boundsPaint.setStrokeWidth(0); |
| 330 boundsPaint.setStyle(SkPaint::kStroke_Style); | 322 boundsPaint.setStyle(SkPaint::kStroke_Style); |
| 331 canvas->drawRect(bounds, boundsPaint); | 323 canvas->drawRect(bounds, boundsPaint); |
| 332 | 324 |
| 333 GrPipelineBuilder pipelineBuilder; | 325 GrPipelineBuilder pipelineBuilder; |
| 334 pipelineBuilder.setXPFactory( | 326 pipelineBuilder.setXPFactory( |
| 335 GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->u
nref(); | 327 GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->u
nref(); |
| 336 pipelineBuilder.setRenderTarget(rt); | 328 pipelineBuilder.setRenderTarget(drawContext->accessRenderTar
get()); |
| 337 | 329 |
| 338 SkAutoTUnref<GrDrawBatch> batch( | 330 SkAutoTUnref<GrDrawBatch> batch( |
| 339 new BezierCubicOrConicTestBatch(gp, bounds, color, klmEq
s, 1.f)); | 331 new BezierCubicOrConicTestBatch(gp, bounds, color, klmEq
s, 1.f)); |
| 340 | 332 |
| 341 drawContext->drawContextPriv().testingOnly_drawBatch(pipelin
eBuilder, batch); | 333 drawContext->drawContextPriv().testingOnly_drawBatch(pipelin
eBuilder, batch); |
| 342 } | 334 } |
| 343 ++col; | 335 ++col; |
| 344 if (numCols == col) { | 336 if (numCols == col) { |
| 345 col = 0; | 337 col = 0; |
| 346 ++row; | 338 ++row; |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 448 SkString onShortName() override { | 440 SkString onShortName() override { |
| 449 return SkString("bezier_quad_effects"); | 441 return SkString("bezier_quad_effects"); |
| 450 } | 442 } |
| 451 | 443 |
| 452 SkISize onISize() override { | 444 SkISize onISize() override { |
| 453 return SkISize::Make(800, 800); | 445 return SkISize::Make(800, 800); |
| 454 } | 446 } |
| 455 | 447 |
| 456 | 448 |
| 457 void onDraw(SkCanvas* canvas) override { | 449 void onDraw(SkCanvas* canvas) override { |
| 458 GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget
(); | 450 GrDrawContext* drawContext = canvas->internal_private_accessTopLayerDraw
Context(); |
| 459 if (nullptr == rt) { | 451 if (!drawContext) { |
| 460 skiagm::GM::DrawGpuOnlyMessage(canvas); | 452 skiagm::GM::DrawGpuOnlyMessage(canvas); |
| 461 return; | 453 return; |
| 462 } | 454 } |
| 463 GrContext* context = rt->getContext(); | 455 |
| 464 if (nullptr == context) { | 456 GrContext* context = canvas->getGrContext(); |
| 457 if (!context) { |
| 465 return; | 458 return; |
| 466 } | 459 } |
| 467 | 460 |
| 468 sk_sp<GrDrawContext> drawContext(context->drawContext(sk_ref_sp(rt))); | |
| 469 if (!drawContext) { | |
| 470 return; | |
| 471 } | |
| 472 | |
| 473 struct Vertex { | 461 struct Vertex { |
| 474 SkPoint fPosition; | 462 SkPoint fPosition; |
| 475 float fUV[4]; // The last two values are ignored. The effect expec
ts a vec4f. | 463 float fUV[4]; // The last two values are ignored. The effect expec
ts a vec4f. |
| 476 }; | 464 }; |
| 477 | 465 |
| 478 static const int kNumQuads = 5; | 466 static const int kNumQuads = 5; |
| 479 SkRandom rand; | 467 SkRandom rand; |
| 480 | 468 |
| 481 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumQuads*3))
); | 469 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumQuads*3))
); |
| 482 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumQuads*3) / numCols); | 470 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumQuads*3) / numCols); |
| 483 SkScalar w = SkIntToScalar(rt->width()) / numCols; | 471 SkScalar w = SkIntToScalar(drawContext->width()) / numCols; |
| 484 SkScalar h = SkIntToScalar(rt->height()) / numRows; | 472 SkScalar h = SkIntToScalar(drawContext->height()) / numRows; |
| 485 int row = 0; | 473 int row = 0; |
| 486 int col = 0; | 474 int col = 0; |
| 487 static const GrColor color = 0xff000000; | 475 static const GrColor color = 0xff000000; |
| 488 | 476 |
| 489 for (int i = 0; i < kNumQuads; ++i) { | 477 for (int i = 0; i < kNumQuads; ++i) { |
| 490 SkPoint baseControlPts[] = { | 478 SkPoint baseControlPts[] = { |
| 491 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 479 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 492 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 480 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 493 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} | 481 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} |
| 494 }; | 482 }; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 538 | 526 |
| 539 SkPaint boundsPaint; | 527 SkPaint boundsPaint; |
| 540 boundsPaint.setColor(0xff808080); | 528 boundsPaint.setColor(0xff808080); |
| 541 boundsPaint.setStrokeWidth(0); | 529 boundsPaint.setStrokeWidth(0); |
| 542 boundsPaint.setStyle(SkPaint::kStroke_Style); | 530 boundsPaint.setStyle(SkPaint::kStroke_Style); |
| 543 canvas->drawRect(bounds, boundsPaint); | 531 canvas->drawRect(bounds, boundsPaint); |
| 544 | 532 |
| 545 GrPipelineBuilder pipelineBuilder; | 533 GrPipelineBuilder pipelineBuilder; |
| 546 pipelineBuilder.setXPFactory( | 534 pipelineBuilder.setXPFactory( |
| 547 GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->u
nref(); | 535 GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->u
nref(); |
| 548 pipelineBuilder.setRenderTarget(rt); | 536 pipelineBuilder.setRenderTarget(drawContext->accessRenderTar
get()); |
| 549 | 537 |
| 550 GrPathUtils::QuadUVMatrix DevToUV(pts); | 538 GrPathUtils::QuadUVMatrix DevToUV(pts); |
| 551 | 539 |
| 552 SkAutoTUnref<GrDrawBatch> batch( | 540 SkAutoTUnref<GrDrawBatch> batch( |
| 553 new BezierQuadTestBatch(gp, bounds, color, DevToUV)); | 541 new BezierQuadTestBatch(gp, bounds, color, DevToUV)); |
| 554 | 542 |
| 555 drawContext->drawContextPriv().testingOnly_drawBatch(pipelin
eBuilder, batch); | 543 drawContext->drawContextPriv().testingOnly_drawBatch(pipelin
eBuilder, batch); |
| 556 } | 544 } |
| 557 ++col; | 545 ++col; |
| 558 if (numCols == col) { | 546 if (numCols == col) { |
| 559 col = 0; | 547 col = 0; |
| 560 ++row; | 548 ++row; |
| 561 } | 549 } |
| 562 } | 550 } |
| 563 } | 551 } |
| 564 } | 552 } |
| 565 | 553 |
| 566 private: | 554 private: |
| 567 typedef GM INHERITED; | 555 typedef GM INHERITED; |
| 568 }; | 556 }; |
| 569 | 557 |
| 570 DEF_GM(return new BezierCubicEffects;) | 558 DEF_GM(return new BezierCubicEffects;) |
| 571 DEF_GM(return new BezierConicEffects;) | 559 DEF_GM(return new BezierConicEffects;) |
| 572 DEF_GM(return new BezierQuadEffects;) | 560 DEF_GM(return new BezierQuadEffects;) |
| 573 } | 561 } |
| 574 | 562 |
| 575 #endif | 563 #endif |
| OLD | NEW |