| 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 |
| 11 #include "gm.h" | 11 #include "gm.h" |
| 12 | 12 |
| 13 #if SK_SUPPORT_GPU | 13 #if SK_SUPPORT_GPU |
| 14 | 14 |
| 15 #include "GrDrawContext.h" |
| 15 #include "GrContext.h" | 16 #include "GrContext.h" |
| 16 #include "GrPathUtils.h" | 17 #include "GrPathUtils.h" |
| 17 #include "GrTest.h" | 18 #include "GrTest.h" |
| 18 #include "SkColorPriv.h" | 19 #include "SkColorPriv.h" |
| 19 #include "SkDevice.h" | 20 #include "SkDevice.h" |
| 20 #include "SkGeometry.h" | 21 #include "SkGeometry.h" |
| 21 | 22 |
| 22 #include "batches/GrTestBatch.h" | 23 #include "batches/GrTestBatch.h" |
| 23 | 24 |
| 24 #include "effects/GrBezierEffect.h" | 25 #include "effects/GrBezierEffect.h" |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget
(); | 123 GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget
(); |
| 123 if (nullptr == rt) { | 124 if (nullptr == rt) { |
| 124 skiagm::GM::DrawGpuOnlyMessage(canvas); | 125 skiagm::GM::DrawGpuOnlyMessage(canvas); |
| 125 return; | 126 return; |
| 126 } | 127 } |
| 127 GrContext* context = rt->getContext(); | 128 GrContext* context = rt->getContext(); |
| 128 if (nullptr == context) { | 129 if (nullptr == context) { |
| 129 return; | 130 return; |
| 130 } | 131 } |
| 131 | 132 |
| 133 SkAutoTUnref<GrDrawContext> drawContext(context->drawContext(rt)); |
| 134 if (!drawContext) { |
| 135 return; |
| 136 } |
| 137 |
| 132 struct Vertex { | 138 struct Vertex { |
| 133 SkPoint fPosition; | 139 SkPoint fPosition; |
| 134 float fKLM[4]; // The last value is ignored. The effect expects a
vec4f. | 140 float fKLM[4]; // The last value is ignored. The effect expects a
vec4f. |
| 135 }; | 141 }; |
| 136 | 142 |
| 137 static const int kNumCubics = 15; | 143 static const int kNumCubics = 15; |
| 138 SkRandom rand; | 144 SkRandom rand; |
| 139 | 145 |
| 140 // Mult by 3 for each edge effect type | 146 // Mult by 3 for each edge effect type |
| 141 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumCubics*3)
)); | 147 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumCubics*3)
)); |
| 142 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumCubics*3) / numCols); | 148 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumCubics*3) / numCols); |
| 143 SkScalar w = SkIntToScalar(rt->width()) / numCols; | 149 SkScalar w = SkIntToScalar(rt->width()) / numCols; |
| 144 SkScalar h = SkIntToScalar(rt->height()) / numRows; | 150 SkScalar h = SkIntToScalar(rt->height()) / numRows; |
| 145 int row = 0; | 151 int row = 0; |
| 146 int col = 0; | 152 int col = 0; |
| 147 static const GrColor color = 0xff000000; | 153 static const GrColor color = 0xff000000; |
| 148 | 154 |
| 149 for (int i = 0; i < kNumCubics; ++i) { | 155 for (int i = 0; i < kNumCubics; ++i) { |
| 150 SkPoint baseControlPts[] = { | 156 SkPoint baseControlPts[] = { |
| 151 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 157 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 152 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 158 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 153 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 159 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 154 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} | 160 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} |
| 155 }; | 161 }; |
| 156 for(int edgeType = 0; edgeType < kGrProcessorEdgeTypeCnt; ++edgeType
) { | 162 for(int edgeType = 0; edgeType < kGrProcessorEdgeTypeCnt; ++edgeType
) { |
| 157 SkAutoTUnref<GrGeometryProcessor> gp; | 163 SkAutoTUnref<GrGeometryProcessor> gp; |
| 158 { // scope to contain GrTestTarget | 164 GrPrimitiveEdgeType et = (GrPrimitiveEdgeType)edgeType; |
| 159 GrTestTarget tt; | 165 gp.reset(GrCubicEffect::Create(color, SkMatrix::I(), et, |
| 160 context->getTestTarget(&tt, rt); | 166 *context->caps())); |
| 161 if (nullptr == tt.target()) { | 167 if (!gp) { |
| 162 continue; | 168 continue; |
| 163 } | |
| 164 GrPrimitiveEdgeType et = (GrPrimitiveEdgeType)edgeType; | |
| 165 gp.reset(GrCubicEffect::Create(color, SkMatrix::I(), et, | |
| 166 *tt.target()->caps())); | |
| 167 if (!gp) { | |
| 168 continue; | |
| 169 } | |
| 170 } | 169 } |
| 171 | |
| 172 SkScalar x = SkScalarMul(col, w); | 170 SkScalar x = SkScalarMul(col, w); |
| 173 SkScalar y = SkScalarMul(row, h); | 171 SkScalar y = SkScalarMul(row, h); |
| 174 SkPoint controlPts[] = { | 172 SkPoint controlPts[] = { |
| 175 {x + baseControlPts[0].fX, y + baseControlPts[0].fY}, | 173 {x + baseControlPts[0].fX, y + baseControlPts[0].fY}, |
| 176 {x + baseControlPts[1].fX, y + baseControlPts[1].fY}, | 174 {x + baseControlPts[1].fX, y + baseControlPts[1].fY}, |
| 177 {x + baseControlPts[2].fX, y + baseControlPts[2].fY}, | 175 {x + baseControlPts[2].fX, y + baseControlPts[2].fY}, |
| 178 {x + baseControlPts[3].fX, y + baseControlPts[3].fY} | 176 {x + baseControlPts[3].fX, y + baseControlPts[3].fY} |
| 179 }; | 177 }; |
| 180 SkPoint chopped[10]; | 178 SkPoint chopped[10]; |
| 181 SkScalar klmEqs[9]; | 179 SkScalar klmEqs[9]; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 209 | 207 |
| 210 SkRect bounds; | 208 SkRect bounds; |
| 211 bounds.set(pts, 4); | 209 bounds.set(pts, 4); |
| 212 | 210 |
| 213 SkPaint boundsPaint; | 211 SkPaint boundsPaint; |
| 214 boundsPaint.setColor(0xff808080); | 212 boundsPaint.setColor(0xff808080); |
| 215 boundsPaint.setStrokeWidth(0); | 213 boundsPaint.setStrokeWidth(0); |
| 216 boundsPaint.setStyle(SkPaint::kStroke_Style); | 214 boundsPaint.setStyle(SkPaint::kStroke_Style); |
| 217 canvas->drawRect(bounds, boundsPaint); | 215 canvas->drawRect(bounds, boundsPaint); |
| 218 | 216 |
| 219 GrTestTarget tt; | |
| 220 context->getTestTarget(&tt, rt); | |
| 221 SkASSERT(tt.target()); | |
| 222 | |
| 223 GrPipelineBuilder pipelineBuilder; | 217 GrPipelineBuilder pipelineBuilder; |
| 224 pipelineBuilder.setXPFactory( | 218 pipelineBuilder.setXPFactory( |
| 225 GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->u
nref(); | 219 GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->u
nref(); |
| 226 pipelineBuilder.setRenderTarget(rt); | 220 pipelineBuilder.setRenderTarget(rt); |
| 227 | 221 |
| 228 BezierCubicOrConicTestBatch::Geometry geometry; | 222 BezierCubicOrConicTestBatch::Geometry geometry; |
| 229 geometry.fColor = color; | 223 geometry.fColor = color; |
| 230 geometry.fBounds = bounds; | 224 geometry.fBounds = bounds; |
| 231 | 225 |
| 232 SkAutoTUnref<GrDrawBatch> batch( | 226 SkAutoTUnref<GrDrawBatch> batch( |
| 233 BezierCubicOrConicTestBatch::Create(gp, geometry, kl
mEqs, klmSigns[c])); | 227 BezierCubicOrConicTestBatch::Create(gp, geometry, kl
mEqs, klmSigns[c])); |
| 234 | 228 |
| 235 tt.target()->drawBatch(pipelineBuilder, batch); | 229 drawContext->internal_drawBatch(pipelineBuilder, batch); |
| 236 } | 230 } |
| 237 ++col; | 231 ++col; |
| 238 if (numCols == col) { | 232 if (numCols == col) { |
| 239 col = 0; | 233 col = 0; |
| 240 ++row; | 234 ++row; |
| 241 } | 235 } |
| 242 } | 236 } |
| 243 } | 237 } |
| 244 } | 238 } |
| 245 | 239 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 272 GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget
(); | 266 GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget
(); |
| 273 if (nullptr == rt) { | 267 if (nullptr == rt) { |
| 274 skiagm::GM::DrawGpuOnlyMessage(canvas); | 268 skiagm::GM::DrawGpuOnlyMessage(canvas); |
| 275 return; | 269 return; |
| 276 } | 270 } |
| 277 GrContext* context = rt->getContext(); | 271 GrContext* context = rt->getContext(); |
| 278 if (nullptr == context) { | 272 if (nullptr == context) { |
| 279 return; | 273 return; |
| 280 } | 274 } |
| 281 | 275 |
| 276 SkAutoTUnref<GrDrawContext> drawContext(context->drawContext(rt)); |
| 277 if (!drawContext) { |
| 278 return; |
| 279 } |
| 280 |
| 282 struct Vertex { | 281 struct Vertex { |
| 283 SkPoint fPosition; | 282 SkPoint fPosition; |
| 284 float fKLM[4]; // The last value is ignored. The effect expects a
vec4f. | 283 float fKLM[4]; // The last value is ignored. The effect expects a
vec4f. |
| 285 }; | 284 }; |
| 286 | 285 |
| 287 static const int kNumConics = 10; | 286 static const int kNumConics = 10; |
| 288 SkRandom rand; | 287 SkRandom rand; |
| 289 | 288 |
| 290 // Mult by 3 for each edge effect type | 289 // Mult by 3 for each edge effect type |
| 291 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumConics*3)
)); | 290 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumConics*3)
)); |
| 292 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumConics*3) / numCols); | 291 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumConics*3) / numCols); |
| 293 SkScalar w = SkIntToScalar(rt->width()) / numCols; | 292 SkScalar w = SkIntToScalar(rt->width()) / numCols; |
| 294 SkScalar h = SkIntToScalar(rt->height()) / numRows; | 293 SkScalar h = SkIntToScalar(rt->height()) / numRows; |
| 295 int row = 0; | 294 int row = 0; |
| 296 int col = 0; | 295 int col = 0; |
| 297 static const GrColor color = 0xff000000; | 296 static const GrColor color = 0xff000000; |
| 298 | 297 |
| 299 for (int i = 0; i < kNumConics; ++i) { | 298 for (int i = 0; i < kNumConics; ++i) { |
| 300 SkPoint baseControlPts[] = { | 299 SkPoint baseControlPts[] = { |
| 301 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 300 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 302 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 301 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 303 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} | 302 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} |
| 304 }; | 303 }; |
| 305 SkScalar weight = rand.nextRangeF(0.f, 2.f); | 304 SkScalar weight = rand.nextRangeF(0.f, 2.f); |
| 306 for(int edgeType = 0; edgeType < kGrProcessorEdgeTypeCnt; ++edgeType
) { | 305 for(int edgeType = 0; edgeType < kGrProcessorEdgeTypeCnt; ++edgeType
) { |
| 307 SkAutoTUnref<GrGeometryProcessor> gp; | 306 SkAutoTUnref<GrGeometryProcessor> gp; |
| 308 { // scope to contain GrTestTarget | 307 GrPrimitiveEdgeType et = (GrPrimitiveEdgeType)edgeType; |
| 309 GrTestTarget tt; | 308 gp.reset(GrConicEffect::Create(color, SkMatrix::I(), et, |
| 310 context->getTestTarget(&tt, rt); | 309 *context->caps(), SkMatrix::I(),
false)); |
| 311 if (nullptr == tt.target()) { | 310 if (!gp) { |
| 312 continue; | 311 continue; |
| 313 } | |
| 314 GrPrimitiveEdgeType et = (GrPrimitiveEdgeType)edgeType; | |
| 315 gp.reset(GrConicEffect::Create(color, SkMatrix::I(), et, | |
| 316 *tt.target()->caps(), SkMatri
x::I(), false)); | |
| 317 if (!gp) { | |
| 318 continue; | |
| 319 } | |
| 320 } | 312 } |
| 321 | 313 |
| 322 SkScalar x = SkScalarMul(col, w); | 314 SkScalar x = SkScalarMul(col, w); |
| 323 SkScalar y = SkScalarMul(row, h); | 315 SkScalar y = SkScalarMul(row, h); |
| 324 SkPoint controlPts[] = { | 316 SkPoint controlPts[] = { |
| 325 {x + baseControlPts[0].fX, y + baseControlPts[0].fY}, | 317 {x + baseControlPts[0].fX, y + baseControlPts[0].fY}, |
| 326 {x + baseControlPts[1].fX, y + baseControlPts[1].fY}, | 318 {x + baseControlPts[1].fX, y + baseControlPts[1].fY}, |
| 327 {x + baseControlPts[2].fX, y + baseControlPts[2].fY} | 319 {x + baseControlPts[2].fX, y + baseControlPts[2].fY} |
| 328 }; | 320 }; |
| 329 SkConic dst[4]; | 321 SkConic dst[4]; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 356 //SkPoint bPts[] = {{0.f, 0.f}, {800.f, 800.f}}; | 348 //SkPoint bPts[] = {{0.f, 0.f}, {800.f, 800.f}}; |
| 357 //bounds.set(bPts, 2); | 349 //bounds.set(bPts, 2); |
| 358 bounds.set(pts, 3); | 350 bounds.set(pts, 3); |
| 359 | 351 |
| 360 SkPaint boundsPaint; | 352 SkPaint boundsPaint; |
| 361 boundsPaint.setColor(0xff808080); | 353 boundsPaint.setColor(0xff808080); |
| 362 boundsPaint.setStrokeWidth(0); | 354 boundsPaint.setStrokeWidth(0); |
| 363 boundsPaint.setStyle(SkPaint::kStroke_Style); | 355 boundsPaint.setStyle(SkPaint::kStroke_Style); |
| 364 canvas->drawRect(bounds, boundsPaint); | 356 canvas->drawRect(bounds, boundsPaint); |
| 365 | 357 |
| 366 GrTestTarget tt; | |
| 367 context->getTestTarget(&tt, rt); | |
| 368 SkASSERT(tt.target()); | |
| 369 | |
| 370 GrPipelineBuilder pipelineBuilder; | 358 GrPipelineBuilder pipelineBuilder; |
| 371 pipelineBuilder.setXPFactory( | 359 pipelineBuilder.setXPFactory( |
| 372 GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->u
nref(); | 360 GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->u
nref(); |
| 373 pipelineBuilder.setRenderTarget(rt); | 361 pipelineBuilder.setRenderTarget(rt); |
| 374 | 362 |
| 375 BezierCubicOrConicTestBatch::Geometry geometry; | 363 BezierCubicOrConicTestBatch::Geometry geometry; |
| 376 geometry.fColor = color; | 364 geometry.fColor = color; |
| 377 geometry.fBounds = bounds; | 365 geometry.fBounds = bounds; |
| 378 | 366 |
| 379 SkAutoTUnref<GrDrawBatch> batch( | 367 SkAutoTUnref<GrDrawBatch> batch( |
| 380 BezierCubicOrConicTestBatch::Create(gp, geometry, kl
mEqs, 1.f)); | 368 BezierCubicOrConicTestBatch::Create(gp, geometry, kl
mEqs, 1.f)); |
| 381 | 369 |
| 382 tt.target()->drawBatch(pipelineBuilder, batch); | 370 drawContext->internal_drawBatch(pipelineBuilder, batch); |
| 383 } | 371 } |
| 384 ++col; | 372 ++col; |
| 385 if (numCols == col) { | 373 if (numCols == col) { |
| 386 col = 0; | 374 col = 0; |
| 387 ++row; | 375 ++row; |
| 388 } | 376 } |
| 389 } | 377 } |
| 390 } | 378 } |
| 391 } | 379 } |
| 392 | 380 |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 517 GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget
(); | 505 GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget
(); |
| 518 if (nullptr == rt) { | 506 if (nullptr == rt) { |
| 519 skiagm::GM::DrawGpuOnlyMessage(canvas); | 507 skiagm::GM::DrawGpuOnlyMessage(canvas); |
| 520 return; | 508 return; |
| 521 } | 509 } |
| 522 GrContext* context = rt->getContext(); | 510 GrContext* context = rt->getContext(); |
| 523 if (nullptr == context) { | 511 if (nullptr == context) { |
| 524 return; | 512 return; |
| 525 } | 513 } |
| 526 | 514 |
| 515 SkAutoTUnref<GrDrawContext> drawContext(context->drawContext(rt)); |
| 516 if (!drawContext) { |
| 517 return; |
| 518 } |
| 519 |
| 527 struct Vertex { | 520 struct Vertex { |
| 528 SkPoint fPosition; | 521 SkPoint fPosition; |
| 529 float fUV[4]; // The last two values are ignored. The effect expec
ts a vec4f. | 522 float fUV[4]; // The last two values are ignored. The effect expec
ts a vec4f. |
| 530 }; | 523 }; |
| 531 | 524 |
| 532 static const int kNumQuads = 5; | 525 static const int kNumQuads = 5; |
| 533 SkRandom rand; | 526 SkRandom rand; |
| 534 | 527 |
| 535 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumQuads*3))
); | 528 int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumQuads*3))
); |
| 536 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumQuads*3) / numCols); | 529 int numRows = SkScalarCeilToInt(SkIntToScalar(kNumQuads*3) / numCols); |
| 537 SkScalar w = SkIntToScalar(rt->width()) / numCols; | 530 SkScalar w = SkIntToScalar(rt->width()) / numCols; |
| 538 SkScalar h = SkIntToScalar(rt->height()) / numRows; | 531 SkScalar h = SkIntToScalar(rt->height()) / numRows; |
| 539 int row = 0; | 532 int row = 0; |
| 540 int col = 0; | 533 int col = 0; |
| 541 static const GrColor color = 0xff000000; | 534 static const GrColor color = 0xff000000; |
| 542 | 535 |
| 543 for (int i = 0; i < kNumQuads; ++i) { | 536 for (int i = 0; i < kNumQuads; ++i) { |
| 544 SkPoint baseControlPts[] = { | 537 SkPoint baseControlPts[] = { |
| 545 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 538 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 546 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, | 539 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, |
| 547 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} | 540 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} |
| 548 }; | 541 }; |
| 549 for(int edgeType = 0; edgeType < kGrProcessorEdgeTypeCnt; ++edgeType
) { | 542 for(int edgeType = 0; edgeType < kGrProcessorEdgeTypeCnt; ++edgeType
) { |
| 550 SkAutoTUnref<GrGeometryProcessor> gp; | 543 SkAutoTUnref<GrGeometryProcessor> gp; |
| 551 { // scope to contain GrTestTarget | 544 GrPrimitiveEdgeType et = (GrPrimitiveEdgeType)edgeType; |
| 552 GrTestTarget tt; | 545 gp.reset(GrQuadEffect::Create(color, SkMatrix::I(), et, |
| 553 context->getTestTarget(&tt, rt); | 546 *context->caps(), SkMatrix::I(), f
alse)); |
| 554 if (nullptr == tt.target()) { | 547 if (!gp) { |
| 555 continue; | 548 continue; |
| 556 } | |
| 557 GrPrimitiveEdgeType et = (GrPrimitiveEdgeType)edgeType; | |
| 558 gp.reset(GrQuadEffect::Create(color, SkMatrix::I(), et, | |
| 559 *tt.target()->caps(), SkMatrix
::I(), false)); | |
| 560 if (!gp) { | |
| 561 continue; | |
| 562 } | |
| 563 } | 549 } |
| 564 | 550 |
| 565 SkScalar x = SkScalarMul(col, w); | 551 SkScalar x = SkScalarMul(col, w); |
| 566 SkScalar y = SkScalarMul(row, h); | 552 SkScalar y = SkScalarMul(row, h); |
| 567 SkPoint controlPts[] = { | 553 SkPoint controlPts[] = { |
| 568 {x + baseControlPts[0].fX, y + baseControlPts[0].fY}, | 554 {x + baseControlPts[0].fX, y + baseControlPts[0].fY}, |
| 569 {x + baseControlPts[1].fX, y + baseControlPts[1].fY}, | 555 {x + baseControlPts[1].fX, y + baseControlPts[1].fY}, |
| 570 {x + baseControlPts[2].fX, y + baseControlPts[2].fY} | 556 {x + baseControlPts[2].fX, y + baseControlPts[2].fY} |
| 571 }; | 557 }; |
| 572 SkPoint chopped[5]; | 558 SkPoint chopped[5]; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 596 | 582 |
| 597 SkRect bounds; | 583 SkRect bounds; |
| 598 bounds.set(pts, 3); | 584 bounds.set(pts, 3); |
| 599 | 585 |
| 600 SkPaint boundsPaint; | 586 SkPaint boundsPaint; |
| 601 boundsPaint.setColor(0xff808080); | 587 boundsPaint.setColor(0xff808080); |
| 602 boundsPaint.setStrokeWidth(0); | 588 boundsPaint.setStrokeWidth(0); |
| 603 boundsPaint.setStyle(SkPaint::kStroke_Style); | 589 boundsPaint.setStyle(SkPaint::kStroke_Style); |
| 604 canvas->drawRect(bounds, boundsPaint); | 590 canvas->drawRect(bounds, boundsPaint); |
| 605 | 591 |
| 606 GrTestTarget tt; | |
| 607 context->getTestTarget(&tt, rt); | |
| 608 SkASSERT(tt.target()); | |
| 609 | |
| 610 GrPipelineBuilder pipelineBuilder; | 592 GrPipelineBuilder pipelineBuilder; |
| 611 pipelineBuilder.setXPFactory( | 593 pipelineBuilder.setXPFactory( |
| 612 GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->u
nref(); | 594 GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->u
nref(); |
| 613 pipelineBuilder.setRenderTarget(rt); | 595 pipelineBuilder.setRenderTarget(rt); |
| 614 | 596 |
| 615 GrPathUtils::QuadUVMatrix DevToUV(pts); | 597 GrPathUtils::QuadUVMatrix DevToUV(pts); |
| 616 | 598 |
| 617 BezierQuadTestBatch::Geometry geometry; | 599 BezierQuadTestBatch::Geometry geometry; |
| 618 geometry.fColor = color; | 600 geometry.fColor = color; |
| 619 geometry.fBounds = bounds; | 601 geometry.fBounds = bounds; |
| 620 | 602 |
| 621 SkAutoTUnref<GrDrawBatch> batch(BezierQuadTestBatch::Create(
gp, geometry, | 603 SkAutoTUnref<GrDrawBatch> batch(BezierQuadTestBatch::Create(
gp, geometry, |
| 622
DevToUV)); | 604
DevToUV)); |
| 623 | 605 |
| 624 tt.target()->drawBatch(pipelineBuilder, batch); | 606 drawContext->internal_drawBatch(pipelineBuilder, batch); |
| 625 } | 607 } |
| 626 ++col; | 608 ++col; |
| 627 if (numCols == col) { | 609 if (numCols == col) { |
| 628 col = 0; | 610 col = 0; |
| 629 ++row; | 611 ++row; |
| 630 } | 612 } |
| 631 } | 613 } |
| 632 } | 614 } |
| 633 } | 615 } |
| 634 | 616 |
| 635 private: | 617 private: |
| 636 typedef GM INHERITED; | 618 typedef GM INHERITED; |
| 637 }; | 619 }; |
| 638 | 620 |
| 639 DEF_GM(return new BezierCubicEffects;) | 621 DEF_GM(return new BezierCubicEffects;) |
| 640 DEF_GM(return new BezierConicEffects;) | 622 DEF_GM(return new BezierConicEffects;) |
| 641 DEF_GM(return new BezierQuadEffects;) | 623 DEF_GM(return new BezierQuadEffects;) |
| 642 } | 624 } |
| 643 | 625 |
| 644 #endif | 626 #endif |
| OLD | NEW |