Chromium Code Reviews| 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 "GrBatchTest.h" | 8 #include "GrBatchTest.h" |
| 9 #include "GrColor.h" | 9 #include "GrColor.h" |
| 10 #include "GrDrawContext.h" | 10 #include "GrDrawContext.h" |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 29 #include "text/GrStencilAndCoverTextContext.h" | 29 #include "text/GrStencilAndCoverTextContext.h" |
| 30 | 30 |
| 31 #include "../private/GrAuditTrail.h" | 31 #include "../private/GrAuditTrail.h" |
| 32 | 32 |
| 33 #define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == fDrawingM anager->getContext()) | 33 #define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == fDrawingM anager->getContext()) |
| 34 #define ASSERT_SINGLE_OWNER \ | 34 #define ASSERT_SINGLE_OWNER \ |
| 35 SkDEBUGCODE(GrSingleOwner::AutoEnforce debug_SingleOwner(fSingleOwner);) | 35 SkDEBUGCODE(GrSingleOwner::AutoEnforce debug_SingleOwner(fSingleOwner);) |
| 36 #define ASSERT_SINGLE_OWNER_PRIV \ | 36 #define ASSERT_SINGLE_OWNER_PRIV \ |
| 37 SkDEBUGCODE(GrSingleOwner::AutoEnforce debug_SingleOwner(fDrawContext->fSing leOwner);) | 37 SkDEBUGCODE(GrSingleOwner::AutoEnforce debug_SingleOwner(fDrawContext->fSing leOwner);) |
| 38 #define RETURN_IF_ABANDONED if (fDrawingManager->wasAbandoned()) { return ; } | 38 #define RETURN_IF_ABANDONED if (fDrawingManager->wasAbandoned()) { return ; } |
| 39 #define RETURN_IF_ABANDONED_PRIV if (fDrawContext->fDrawingManager->wasAbandon ed()) { return; } | |
| 39 #define RETURN_FALSE_IF_ABANDONED if (fDrawingManager->wasAbandoned()) { return false; } | 40 #define RETURN_FALSE_IF_ABANDONED if (fDrawingManager->wasAbandoned()) { return false; } |
| 40 #define RETURN_FALSE_IF_ABANDONED_PRIV if (fDrawContext->fDrawingManager->wasAb andoned()) { return false; } | 41 #define RETURN_FALSE_IF_ABANDONED_PRIV if (fDrawContext->fDrawingManager->wasAb andoned()) { return false; } |
| 41 #define RETURN_NULL_IF_ABANDONED if (fDrawingManager->wasAbandoned()) { return nullptr; } | 42 #define RETURN_NULL_IF_ABANDONED if (fDrawingManager->wasAbandoned()) { return nullptr; } |
| 42 | 43 |
| 43 class AutoCheckFlush { | 44 class AutoCheckFlush { |
| 44 public: | 45 public: |
| 45 AutoCheckFlush(GrDrawingManager* drawingManager) : fDrawingManager(drawingMa nager) { | 46 AutoCheckFlush(GrDrawingManager* drawingManager) : fDrawingManager(drawingMa nager) { |
| 46 SkASSERT(fDrawingManager); | 47 SkASSERT(fDrawingManager); |
| 47 } | 48 } |
| 48 ~AutoCheckFlush() { fDrawingManager->getContext()->flushIfNecessary(); } | 49 ~AutoCheckFlush() { fDrawingManager->getContext()->flushIfNecessary(); } |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 182 | 183 |
| 183 void GrDrawContext::clear(const SkIRect* rect, | 184 void GrDrawContext::clear(const SkIRect* rect, |
| 184 const GrColor color, | 185 const GrColor color, |
| 185 bool canIgnoreRect) { | 186 bool canIgnoreRect) { |
| 186 ASSERT_SINGLE_OWNER | 187 ASSERT_SINGLE_OWNER |
| 187 RETURN_IF_ABANDONED | 188 RETURN_IF_ABANDONED |
| 188 SkDEBUGCODE(this->validate();) | 189 SkDEBUGCODE(this->validate();) |
| 189 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::clear"); | 190 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::clear"); |
| 190 | 191 |
| 191 AutoCheckFlush acf(fDrawingManager); | 192 AutoCheckFlush acf(fDrawingManager); |
| 192 this->getDrawTarget()->clear(rect, color, canIgnoreRect, fRenderTarget.get() ); | 193 this->getDrawTarget()->clear(rect, color, canIgnoreRect, this); |
| 193 } | 194 } |
| 194 | 195 |
| 195 | 196 |
| 196 void GrDrawContext::drawPaint(const GrClip& clip, | 197 void GrDrawContext::drawPaint(const GrClip& clip, |
| 197 const GrPaint& origPaint, | 198 const GrPaint& origPaint, |
| 198 const SkMatrix& viewMatrix) { | 199 const SkMatrix& viewMatrix) { |
| 199 ASSERT_SINGLE_OWNER | 200 ASSERT_SINGLE_OWNER |
| 200 RETURN_IF_ABANDONED | 201 RETURN_IF_ABANDONED |
| 201 SkDEBUGCODE(this->validate();) | 202 SkDEBUGCODE(this->validate();) |
| 202 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawPaint"); | 203 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawPaint"); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 234 return; | 235 return; |
| 235 } | 236 } |
| 236 | 237 |
| 237 AutoCheckFlush acf(fDrawingManager); | 238 AutoCheckFlush acf(fDrawingManager); |
| 238 | 239 |
| 239 SkAutoTUnref<GrDrawBatch> batch( | 240 SkAutoTUnref<GrDrawBatch> batch( |
| 240 GrRectBatchFactory::CreateNonAAFill(paint->getColor(), SkMatrix: :I(), r, nullptr, | 241 GrRectBatchFactory::CreateNonAAFill(paint->getColor(), SkMatrix: :I(), r, nullptr, |
| 241 &localMatrix)); | 242 &localMatrix)); |
| 242 GrPipelineBuilder pipelineBuilder(*paint, this->isUnifiedMultisampled()) ; | 243 GrPipelineBuilder pipelineBuilder(*paint, this->isUnifiedMultisampled()) ; |
| 243 pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 244 pipelineBuilder.setRenderTarget(fRenderTarget.get()); |
| 244 this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 245 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); |
| 245 } | 246 } |
| 246 } | 247 } |
| 247 | 248 |
| 248 static inline bool rect_contains_inclusive(const SkRect& rect, const SkPoint& po int) { | 249 static inline bool rect_contains_inclusive(const SkRect& rect, const SkPoint& po int) { |
| 249 return point.fX >= rect.fLeft && point.fX <= rect.fRight && | 250 return point.fX >= rect.fLeft && point.fX <= rect.fRight && |
| 250 point.fY >= rect.fTop && point.fY <= rect.fBottom; | 251 point.fY >= rect.fTop && point.fY <= rect.fBottom; |
| 251 } | 252 } |
| 252 | 253 |
| 253 static bool view_matrix_ok_for_aa_fill_rect(const SkMatrix& viewMatrix) { | 254 static bool view_matrix_ok_for_aa_fill_rect(const SkMatrix& viewMatrix) { |
| 254 return viewMatrix.preservesRightAngles(); | 255 return viewMatrix.preservesRightAngles(); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 315 // Does the rect bound the RT? | 316 // Does the rect bound the RT? |
| 316 SkPoint srcSpaceRTQuad[4]; | 317 SkPoint srcSpaceRTQuad[4]; |
| 317 invM.mapRectToQuad(srcSpaceRTQuad, rtRect); | 318 invM.mapRectToQuad(srcSpaceRTQuad, rtRect); |
| 318 if (rect_contains_inclusive(rect, srcSpaceRTQuad[0]) && | 319 if (rect_contains_inclusive(rect, srcSpaceRTQuad[0]) && |
| 319 rect_contains_inclusive(rect, srcSpaceRTQuad[1]) && | 320 rect_contains_inclusive(rect, srcSpaceRTQuad[1]) && |
| 320 rect_contains_inclusive(rect, srcSpaceRTQuad[2]) && | 321 rect_contains_inclusive(rect, srcSpaceRTQuad[2]) && |
| 321 rect_contains_inclusive(rect, srcSpaceRTQuad[3])) { | 322 rect_contains_inclusive(rect, srcSpaceRTQuad[3])) { |
| 322 // Will it blend? | 323 // Will it blend? |
| 323 GrColor clearColor; | 324 GrColor clearColor; |
| 324 if (paint.isConstantBlendedColor(&clearColor)) { | 325 if (paint.isConstantBlendedColor(&clearColor)) { |
| 325 this->getDrawTarget()->clear(nullptr, clearColor, true, fRen derTarget.get()); | 326 this->getDrawTarget()->clear(nullptr, clearColor, true, this ); |
| 326 return; | 327 return; |
| 327 } | 328 } |
| 328 } | 329 } |
| 329 } | 330 } |
| 330 } | 331 } |
| 331 | 332 |
| 332 bool snapToPixelCenters = false; | 333 bool snapToPixelCenters = false; |
| 333 SkAutoTUnref<GrDrawBatch> batch; | 334 SkAutoTUnref<GrDrawBatch> batch; |
| 334 if (width < 0) { | 335 if (width < 0) { |
| 335 batch.reset(this->getFillRectBatch(paint, viewMatrix, rect)); | 336 batch.reset(this->getFillRectBatch(paint, viewMatrix, rect)); |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 357 | 358 |
| 358 if (batch) { | 359 if (batch) { |
| 359 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisampled()) ; | 360 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisampled()) ; |
| 360 pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 361 pipelineBuilder.setRenderTarget(fRenderTarget.get()); |
| 361 | 362 |
| 362 if (snapToPixelCenters) { | 363 if (snapToPixelCenters) { |
| 363 pipelineBuilder.setState(GrPipelineBuilder::kSnapVerticesToPixelCent ers_Flag, | 364 pipelineBuilder.setState(GrPipelineBuilder::kSnapVerticesToPixelCent ers_Flag, |
| 364 snapToPixelCenters); | 365 snapToPixelCenters); |
| 365 } | 366 } |
| 366 | 367 |
| 367 this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 368 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); |
| 368 return; | 369 return; |
| 369 } | 370 } |
| 370 | 371 |
| 371 SkPath path; | 372 SkPath path; |
| 372 path.setIsVolatile(true); | 373 path.setIsVolatile(true); |
| 373 path.addRect(rect); | 374 path.addRect(rect); |
| 374 this->internalDrawPath(clip, paint, viewMatrix, path, *style); | 375 this->internalDrawPath(clip, paint, viewMatrix, path, *style); |
| 375 } | 376 } |
| 376 | 377 |
| 378 void GrDrawContextPriv::clearStencilClip(const SkIRect& rect, bool insideClip) { | |
| 379 ASSERT_SINGLE_OWNER_PRIV | |
| 380 RETURN_IF_ABANDONED_PRIV | |
| 381 SkDEBUGCODE(fDrawContext->validate();) | |
| 382 GR_AUDIT_TRAIL_AUTO_FRAME(fDrawContext->fAuditTrail, "GrDrawContextPriv::cle arStencilClip"); | |
| 383 | |
| 384 AutoCheckFlush acf(fDrawContext->fDrawingManager); | |
| 385 fDrawContext->getDrawTarget()->clearStencilClip(rect, insideClip, | |
| 386 fDrawContext->accessRenderTa rget()); | |
| 387 } | |
| 388 | |
| 389 void GrDrawContextPriv::stencilPath(const GrPipelineBuilder& pipelineBuilder, | |
| 390 const GrClip& clip, | |
| 391 const SkMatrix& viewMatrix, | |
| 392 const GrPath* path, | |
| 393 GrPathRendering::FillType fill) { | |
| 394 fDrawContext->getDrawTarget()->stencilPath(pipelineBuilder, fDrawContext, | |
| 395 clip, viewMatrix, path, fill); | |
| 396 } | |
| 397 | |
| 398 void GrDrawContextPriv::stencilRect(const GrFixedClip& clip, | |
| 399 const GrUserStencilSettings* ss, | |
| 400 bool doAA, | |
| 401 const SkMatrix& viewMatrix, | |
| 402 const SkRect& rect) { | |
| 403 ASSERT_SINGLE_OWNER_PRIV | |
| 404 RETURN_IF_ABANDONED_PRIV | |
| 405 SkDEBUGCODE(fDrawContext->validate();) | |
| 406 GR_AUDIT_TRAIL_AUTO_FRAME(fDrawContext->fAuditTrail, "GrDrawContext::stencil Rect"); | |
| 407 | |
| 408 AutoCheckFlush acf(fDrawContext->fDrawingManager); | |
| 409 | |
| 410 GrPaint paint; | |
| 411 paint.setAntiAlias(doAA); | |
| 412 paint.setXPFactory(GrDisableColorXPFactory::Create()); | |
|
bungeman-skia
2016/06/03 21:11:12
bug: leaks
| |
| 413 | |
| 414 SkAutoTUnref<GrDrawBatch> batch(fDrawContext->getFillRectBatch(paint, viewMa trix, rect)); | |
| 415 SkASSERT(batch); | |
| 416 | |
| 417 GrPipelineBuilder pipelineBuilder(paint, fDrawContext->isUnifiedMultisampled ()); | |
| 418 pipelineBuilder.setRenderTarget(fDrawContext->accessRenderTarget()); | |
| 419 pipelineBuilder.setUserStencil(ss); | |
| 420 | |
| 421 fDrawContext->getDrawTarget()->drawBatch(pipelineBuilder, fDrawContext, clip , batch); | |
| 422 } | |
| 423 | |
| 377 bool GrDrawContextPriv::drawAndStencilRect(const GrFixedClip& clip, | 424 bool GrDrawContextPriv::drawAndStencilRect(const GrFixedClip& clip, |
| 378 const GrUserStencilSettings* ss, | 425 const GrUserStencilSettings* ss, |
| 379 SkRegion::Op op, | 426 SkRegion::Op op, |
| 380 bool invert, | 427 bool invert, |
| 381 bool doAA, | 428 bool doAA, |
| 382 const SkMatrix& viewMatrix, | 429 const SkMatrix& viewMatrix, |
| 383 const SkRect& rect) { | 430 const SkRect& rect) { |
| 384 ASSERT_SINGLE_OWNER_PRIV | 431 ASSERT_SINGLE_OWNER_PRIV |
| 385 RETURN_FALSE_IF_ABANDONED_PRIV | 432 RETURN_FALSE_IF_ABANDONED_PRIV |
| 386 SkDEBUGCODE(fDrawContext->validate();) | 433 SkDEBUGCODE(fDrawContext->validate();) |
| 387 GR_AUDIT_TRAIL_AUTO_FRAME(fDrawContext->fAuditTrail, "GrDrawContext::stencil Rect"); | 434 GR_AUDIT_TRAIL_AUTO_FRAME(fDrawContext->fAuditTrail, "GrDrawContext::stencil Rect"); |
| 388 | 435 |
| 389 AutoCheckFlush acf(fDrawContext->fDrawingManager); | 436 AutoCheckFlush acf(fDrawContext->fDrawingManager); |
| 390 | 437 |
| 391 GrPaint paint; | 438 GrPaint paint; |
| 392 paint.setAntiAlias(doAA); | 439 paint.setAntiAlias(doAA); |
| 393 paint.setCoverageSetOpXPFactory(op, invert); | 440 paint.setCoverageSetOpXPFactory(op, invert); |
| 394 | 441 |
| 395 SkAutoTUnref<GrDrawBatch> batch(fDrawContext->getFillRectBatch(paint, viewMa trix, rect)); | 442 SkAutoTUnref<GrDrawBatch> batch(fDrawContext->getFillRectBatch(paint, viewMa trix, rect)); |
| 396 if (batch) { | 443 if (batch) { |
| 397 GrPipelineBuilder pipelineBuilder(paint, fDrawContext->isUnifiedMultisam pled()); | 444 GrPipelineBuilder pipelineBuilder(paint, fDrawContext->isUnifiedMultisam pled()); |
| 398 pipelineBuilder.setRenderTarget(fDrawContext->accessRenderTarget()); | 445 pipelineBuilder.setRenderTarget(fDrawContext->accessRenderTarget()); |
| 399 pipelineBuilder.setUserStencil(ss); | 446 pipelineBuilder.setUserStencil(ss); |
| 400 | 447 |
| 401 fDrawContext->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 448 fDrawContext->getDrawTarget()->drawBatch(pipelineBuilder, fDrawContext, clip, batch); |
| 402 return true; | 449 return true; |
| 403 } | 450 } |
| 404 | 451 |
| 405 SkPath path; | 452 SkPath path; |
| 406 path.setIsVolatile(true); | 453 path.setIsVolatile(true); |
| 407 path.addRect(rect); | 454 path.addRect(rect); |
| 408 return this->drawAndStencilPath(clip, ss, op, invert, doAA, viewMatrix, path ); | 455 return this->drawAndStencilPath(clip, ss, op, invert, doAA, viewMatrix, path ); |
| 409 } | 456 } |
| 410 | 457 |
| 411 void GrDrawContext::fillRectToRect(const GrClip& clip, | 458 void GrDrawContext::fillRectToRect(const GrClip& clip, |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 426 batch.reset(GrAAFillRectBatch::CreateWithLocalRect(paint.getColor(), vie wMatrix, rectToDraw, | 473 batch.reset(GrAAFillRectBatch::CreateWithLocalRect(paint.getColor(), vie wMatrix, rectToDraw, |
| 427 localRect)); | 474 localRect)); |
| 428 } else { | 475 } else { |
| 429 batch.reset(GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMa trix, rectToDraw, | 476 batch.reset(GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMa trix, rectToDraw, |
| 430 &localRect, nullptr)); | 477 &localRect, nullptr)); |
| 431 } | 478 } |
| 432 | 479 |
| 433 if (batch) { | 480 if (batch) { |
| 434 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisampled()); | 481 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisampled()); |
| 435 pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 482 pipelineBuilder.setRenderTarget(fRenderTarget.get()); |
| 436 this->drawBatch(&pipelineBuilder, clip, batch); | 483 this->drawBatch(pipelineBuilder, clip, batch); |
| 437 } | 484 } |
| 438 } | 485 } |
| 439 | 486 |
| 440 void GrDrawContext::fillRectWithLocalMatrix(const GrClip& clip, | 487 void GrDrawContext::fillRectWithLocalMatrix(const GrClip& clip, |
| 441 const GrPaint& paint, | 488 const GrPaint& paint, |
| 442 const SkMatrix& viewMatrix, | 489 const SkMatrix& viewMatrix, |
| 443 const SkRect& rectToDraw, | 490 const SkRect& rectToDraw, |
| 444 const SkMatrix& localMatrix) { | 491 const SkMatrix& localMatrix) { |
| 445 ASSERT_SINGLE_OWNER | 492 ASSERT_SINGLE_OWNER |
| 446 RETURN_IF_ABANDONED | 493 RETURN_IF_ABANDONED |
| 447 SkDEBUGCODE(this->validate();) | 494 SkDEBUGCODE(this->validate();) |
| 448 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectWithLocalMatr ix"); | 495 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectWithLocalMatr ix"); |
| 449 | 496 |
| 450 AutoCheckFlush acf(fDrawingManager); | 497 AutoCheckFlush acf(fDrawingManager); |
| 451 | 498 |
| 452 SkAutoTUnref<GrDrawBatch> batch; | 499 SkAutoTUnref<GrDrawBatch> batch; |
| 453 if (should_apply_coverage_aa(paint, fRenderTarget.get()) && | 500 if (should_apply_coverage_aa(paint, fRenderTarget.get()) && |
| 454 view_matrix_ok_for_aa_fill_rect(viewMatrix)) { | 501 view_matrix_ok_for_aa_fill_rect(viewMatrix)) { |
| 455 batch.reset(GrAAFillRectBatch::Create(paint.getColor(), viewMatrix, loca lMatrix, | 502 batch.reset(GrAAFillRectBatch::Create(paint.getColor(), viewMatrix, loca lMatrix, |
| 456 rectToDraw)); | 503 rectToDraw)); |
| 457 } else { | 504 } else { |
| 458 batch.reset(GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMa trix, rectToDraw, | 505 batch.reset(GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMa trix, rectToDraw, |
| 459 nullptr, &localMatrix)); | 506 nullptr, &localMatrix)); |
| 460 } | 507 } |
| 461 | 508 |
| 462 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisampled()); | 509 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisampled()); |
| 463 pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 510 pipelineBuilder.setRenderTarget(fRenderTarget.get()); |
| 464 this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 511 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); |
| 465 } | 512 } |
| 466 | 513 |
| 467 void GrDrawContext::drawVertices(const GrClip& clip, | 514 void GrDrawContext::drawVertices(const GrClip& clip, |
| 468 const GrPaint& paint, | 515 const GrPaint& paint, |
| 469 const SkMatrix& viewMatrix, | 516 const SkMatrix& viewMatrix, |
| 470 GrPrimitiveType primitiveType, | 517 GrPrimitiveType primitiveType, |
| 471 int vertexCount, | 518 int vertexCount, |
| 472 const SkPoint positions[], | 519 const SkPoint positions[], |
| 473 const SkPoint texCoords[], | 520 const SkPoint texCoords[], |
| 474 const GrColor colors[], | 521 const GrColor colors[], |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 500 | 547 |
| 501 GrDrawVerticesBatch::Geometry geometry; | 548 GrDrawVerticesBatch::Geometry geometry; |
| 502 geometry.fColor = paint.getColor(); | 549 geometry.fColor = paint.getColor(); |
| 503 SkAutoTUnref<GrDrawBatch> batch(GrDrawVerticesBatch::Create(geometry, primit iveType, viewMatrix, | 550 SkAutoTUnref<GrDrawBatch> batch(GrDrawVerticesBatch::Create(geometry, primit iveType, viewMatrix, |
| 504 positions, verte xCount, indices, | 551 positions, verte xCount, indices, |
| 505 indexCount, colo rs, texCoords, | 552 indexCount, colo rs, texCoords, |
| 506 bounds)); | 553 bounds)); |
| 507 | 554 |
| 508 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisampled()); | 555 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisampled()); |
| 509 pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 556 pipelineBuilder.setRenderTarget(fRenderTarget.get()); |
| 510 this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 557 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); |
| 511 } | 558 } |
| 512 | 559 |
| 513 /////////////////////////////////////////////////////////////////////////////// | 560 /////////////////////////////////////////////////////////////////////////////// |
| 514 | 561 |
| 515 void GrDrawContext::drawAtlas(const GrClip& clip, | 562 void GrDrawContext::drawAtlas(const GrClip& clip, |
| 516 const GrPaint& paint, | 563 const GrPaint& paint, |
| 517 const SkMatrix& viewMatrix, | 564 const SkMatrix& viewMatrix, |
| 518 int spriteCount, | 565 int spriteCount, |
| 519 const SkRSXform xform[], | 566 const SkRSXform xform[], |
| 520 const SkRect texRect[], | 567 const SkRect texRect[], |
| 521 const SkColor colors[]) { | 568 const SkColor colors[]) { |
| 522 ASSERT_SINGLE_OWNER | 569 ASSERT_SINGLE_OWNER |
| 523 RETURN_IF_ABANDONED | 570 RETURN_IF_ABANDONED |
| 524 SkDEBUGCODE(this->validate();) | 571 SkDEBUGCODE(this->validate();) |
| 525 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawAtlas"); | 572 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawAtlas"); |
| 526 | 573 |
| 527 AutoCheckFlush acf(fDrawingManager); | 574 AutoCheckFlush acf(fDrawingManager); |
| 528 | 575 |
| 529 GrDrawAtlasBatch::Geometry geometry; | 576 GrDrawAtlasBatch::Geometry geometry; |
| 530 geometry.fColor = paint.getColor(); | 577 geometry.fColor = paint.getColor(); |
| 531 SkAutoTUnref<GrDrawBatch> batch(GrDrawAtlasBatch::Create(geometry, viewMatri x, spriteCount, | 578 SkAutoTUnref<GrDrawBatch> batch(GrDrawAtlasBatch::Create(geometry, viewMatri x, spriteCount, |
| 532 xform, texRect, col ors)); | 579 xform, texRect, col ors)); |
| 533 | 580 |
| 534 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisampled()); | 581 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisampled()); |
| 535 pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 582 pipelineBuilder.setRenderTarget(fRenderTarget.get()); |
| 536 this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 583 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); |
| 537 } | 584 } |
| 538 | 585 |
| 539 /////////////////////////////////////////////////////////////////////////////// | 586 /////////////////////////////////////////////////////////////////////////////// |
| 540 | 587 |
| 541 void GrDrawContext::drawRRect(const GrClip& clip, | 588 void GrDrawContext::drawRRect(const GrClip& clip, |
| 542 const GrPaint& paint, | 589 const GrPaint& paint, |
| 543 const SkMatrix& viewMatrix, | 590 const SkMatrix& viewMatrix, |
| 544 const SkRRect& rrect, | 591 const SkRRect& rrect, |
| 545 const GrStyle& style) { | 592 const GrStyle& style) { |
| 546 ASSERT_SINGLE_OWNER | 593 ASSERT_SINGLE_OWNER |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 560 GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps(); | 607 GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps(); |
| 561 | 608 |
| 562 SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateRRectBatch(paint.g etColor(), | 609 SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateRRectBatch(paint.g etColor(), |
| 563 viewMat rix, | 610 viewMat rix, |
| 564 rrect, | 611 rrect, |
| 565 stroke, | 612 stroke, |
| 566 shaderC aps)); | 613 shaderC aps)); |
| 567 if (batch) { | 614 if (batch) { |
| 568 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisample d()); | 615 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisample d()); |
| 569 pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 616 pipelineBuilder.setRenderTarget(fRenderTarget.get()); |
| 570 this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 617 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch) ; |
| 571 return; | 618 return; |
| 572 } | 619 } |
| 573 } | 620 } |
| 574 | 621 |
| 575 SkPath path; | 622 SkPath path; |
| 576 path.setIsVolatile(true); | 623 path.setIsVolatile(true); |
| 577 path.addRRect(rrect); | 624 path.addRRect(rrect); |
| 578 this->internalDrawPath(clip, paint, viewMatrix, path, style); | 625 this->internalDrawPath(clip, paint, viewMatrix, path, style); |
| 579 } | 626 } |
| 580 | 627 |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 686 if (should_apply_coverage_aa(paint, fRenderTarget.get())) { | 733 if (should_apply_coverage_aa(paint, fRenderTarget.get())) { |
| 687 GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps(); | 734 GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps(); |
| 688 SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateOvalBatch(paint.ge tColor(), | 735 SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateOvalBatch(paint.ge tColor(), |
| 689 viewMatr ix, | 736 viewMatr ix, |
| 690 oval, | 737 oval, |
| 691 stroke, | 738 stroke, |
| 692 shaderCa ps)); | 739 shaderCa ps)); |
| 693 if (batch) { | 740 if (batch) { |
| 694 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisample d()); | 741 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisample d()); |
| 695 pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 742 pipelineBuilder.setRenderTarget(fRenderTarget.get()); |
| 696 this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 743 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch) ; |
| 697 return; | 744 return; |
| 698 } | 745 } |
| 699 } | 746 } |
| 700 | 747 |
| 701 SkPath path; | 748 SkPath path; |
| 702 path.setIsVolatile(true); | 749 path.setIsVolatile(true); |
| 703 path.addOval(oval); | 750 path.addOval(oval); |
| 704 this->internalDrawPath(clip, paint, viewMatrix, path, style); | 751 this->internalDrawPath(clip, paint, viewMatrix, path, style); |
| 705 } | 752 } |
| 706 | 753 |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 717 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawImageNine"); | 764 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawImageNine"); |
| 718 | 765 |
| 719 AutoCheckFlush acf(fDrawingManager); | 766 AutoCheckFlush acf(fDrawingManager); |
| 720 | 767 |
| 721 SkAutoTUnref<GrDrawBatch> batch(GrNinePatch::CreateNonAA(paint.getColor(), v iewMatrix, | 768 SkAutoTUnref<GrDrawBatch> batch(GrNinePatch::CreateNonAA(paint.getColor(), v iewMatrix, |
| 722 imageWidth, imageHe ight, | 769 imageWidth, imageHe ight, |
| 723 center, dst)); | 770 center, dst)); |
| 724 | 771 |
| 725 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisampled()); | 772 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisampled()); |
| 726 pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 773 pipelineBuilder.setRenderTarget(fRenderTarget.get()); |
| 727 this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 774 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); |
| 728 } | 775 } |
| 729 | 776 |
| 730 | 777 |
| 731 // Can 'path' be drawn as a pair of filled nested rectangles? | 778 // Can 'path' be drawn as a pair of filled nested rectangles? |
| 732 static bool fills_as_nested_rects(const SkMatrix& viewMatrix, const SkPath& path , SkRect rects[2]) { | 779 static bool fills_as_nested_rects(const SkMatrix& viewMatrix, const SkPath& path , SkRect rects[2]) { |
| 733 | 780 |
| 734 if (path.isInverseFillType()) { | 781 if (path.isInverseFillType()) { |
| 735 return false; | 782 return false; |
| 736 } | 783 } |
| 737 | 784 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 778 const GrPaint& paint, GrDrawBatch* batch) { | 825 const GrPaint& paint, GrDrawBatch* batch) { |
| 779 ASSERT_SINGLE_OWNER | 826 ASSERT_SINGLE_OWNER |
| 780 RETURN_IF_ABANDONED | 827 RETURN_IF_ABANDONED |
| 781 SkDEBUGCODE(this->validate();) | 828 SkDEBUGCODE(this->validate();) |
| 782 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch"); | 829 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch"); |
| 783 | 830 |
| 784 AutoCheckFlush acf(fDrawingManager); | 831 AutoCheckFlush acf(fDrawingManager); |
| 785 | 832 |
| 786 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisampled()); | 833 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisampled()); |
| 787 pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 834 pipelineBuilder.setRenderTarget(fRenderTarget.get()); |
| 788 this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 835 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); |
| 789 } | 836 } |
| 790 | 837 |
| 791 void GrDrawContext::drawPath(const GrClip& clip, | 838 void GrDrawContext::drawPath(const GrClip& clip, |
| 792 const GrPaint& paint, | 839 const GrPaint& paint, |
| 793 const SkMatrix& viewMatrix, | 840 const SkMatrix& viewMatrix, |
| 794 const SkPath& path, | 841 const SkPath& path, |
| 795 const GrStyle& style) { | 842 const GrStyle& style) { |
| 796 ASSERT_SINGLE_OWNER | 843 ASSERT_SINGLE_OWNER |
| 797 RETURN_IF_ABANDONED | 844 RETURN_IF_ABANDONED |
| 798 SkDEBUGCODE(this->validate();) | 845 SkDEBUGCODE(this->validate();) |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 811 if (style.isSimpleFill() && !path.isConvex()) { | 858 if (style.isSimpleFill() && !path.isConvex()) { |
| 812 // Concave AA paths are expensive - try to avoid them for special ca ses | 859 // Concave AA paths are expensive - try to avoid them for special ca ses |
| 813 SkRect rects[2]; | 860 SkRect rects[2]; |
| 814 | 861 |
| 815 if (fills_as_nested_rects(viewMatrix, path, rects)) { | 862 if (fills_as_nested_rects(viewMatrix, path, rects)) { |
| 816 SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateAAFill NestedRects( | 863 SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateAAFill NestedRects( |
| 817 paint.getColor(), viewMatrix, rects)); | 864 paint.getColor(), viewMatrix, rects)); |
| 818 if (batch) { | 865 if (batch) { |
| 819 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMul tisampled()); | 866 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMul tisampled()); |
| 820 pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 867 pipelineBuilder.setRenderTarget(fRenderTarget.get()); |
| 821 this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batc h); | 868 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip , batch); |
| 822 } | 869 } |
| 823 return; | 870 return; |
| 824 } | 871 } |
| 825 } | 872 } |
| 826 SkRect ovalRect; | 873 SkRect ovalRect; |
| 827 bool isOval = path.isOval(&ovalRect); | 874 bool isOval = path.isOval(&ovalRect); |
| 828 | 875 |
| 829 if (isOval && !path.isInverseFillType()) { | 876 if (isOval && !path.isInverseFillType()) { |
| 830 GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps(); | 877 GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps(); |
| 831 SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateOvalBatch(pain t.getColor(), | 878 SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateOvalBatch(pain t.getColor(), |
| 832 view Matrix, | 879 view Matrix, |
| 833 oval Rect, | 880 oval Rect, |
| 834 styl e.strokeRec(), | 881 styl e.strokeRec(), |
| 835 shad erCaps)); | 882 shad erCaps)); |
| 836 if (batch) { | 883 if (batch) { |
| 837 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisa mpled()); | 884 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisa mpled()); |
| 838 pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 885 pipelineBuilder.setRenderTarget(fRenderTarget.get()); |
| 839 this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 886 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, ba tch); |
| 840 return; | 887 return; |
| 841 } | 888 } |
| 842 } | 889 } |
| 843 } | 890 } |
| 844 | 891 |
| 845 // Note that internalDrawPath may sw-rasterize the path into a scratch textu re. | 892 // Note that internalDrawPath may sw-rasterize the path into a scratch textu re. |
| 846 // Scratch textures can be recycled after they are returned to the texture | 893 // Scratch textures can be recycled after they are returned to the texture |
| 847 // cache. This presents a potential hazard for buffered drawing. However, | 894 // cache. This presents a potential hazard for buffered drawing. However, |
| 848 // the writePixels that uploads to the scratch will perform a flush so we're | 895 // the writePixels that uploads to the scratch will perform a flush so we're |
| 849 // OK. | 896 // OK. |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 869 return true; | 916 return true; |
| 870 } | 917 } |
| 871 | 918 |
| 872 AutoCheckFlush acf(fDrawContext->fDrawingManager); | 919 AutoCheckFlush acf(fDrawContext->fDrawingManager); |
| 873 | 920 |
| 874 // An Assumption here is that path renderer would use some form of tweaking | 921 // An Assumption here is that path renderer would use some form of tweaking |
| 875 // the src color (either the input alpha or in the frag shader) to implement | 922 // the src color (either the input alpha or in the frag shader) to implement |
| 876 // aa. If we have some future driver-mojo path AA that can do the right | 923 // aa. If we have some future driver-mojo path AA that can do the right |
| 877 // thing WRT to the blend then we'll need some query on the PR. | 924 // thing WRT to the blend then we'll need some query on the PR. |
| 878 bool useCoverageAA = doAA && !fDrawContext->fRenderTarget->isUnifiedMultisam pled(); | 925 bool useCoverageAA = doAA && !fDrawContext->fRenderTarget->isUnifiedMultisam pled(); |
| 879 bool hasUserStencilSettings = (&GrUserStencilSettings::kUnused != ss); | 926 bool hasUserStencilSettings = !ss->isUnused(); |
| 880 bool isStencilBufferMSAA = fDrawContext->fRenderTarget->isStencilBufferMulti sampled(); | 927 bool isStencilBufferMSAA = fDrawContext->fRenderTarget->isStencilBufferMulti sampled(); |
| 881 | 928 |
| 882 const GrPathRendererChain::DrawType type = | 929 const GrPathRendererChain::DrawType type = |
| 883 useCoverageAA ? GrPathRendererChain::kColorAntiAlias_DrawType | 930 useCoverageAA ? GrPathRendererChain::kColorAntiAlias_DrawType |
| 884 : GrPathRendererChain::kColor_DrawType; | 931 : GrPathRendererChain::kColor_DrawType; |
| 885 | 932 |
| 886 GrPathRenderer::CanDrawPathArgs canDrawArgs; | 933 GrPathRenderer::CanDrawPathArgs canDrawArgs; |
| 887 canDrawArgs.fShaderCaps = fDrawContext->fDrawingManager->getContext()->caps( )->shaderCaps(); | 934 canDrawArgs.fShaderCaps = fDrawContext->fDrawingManager->getContext()->caps( )->shaderCaps(); |
| 888 canDrawArgs.fViewMatrix = &viewMatrix; | 935 canDrawArgs.fViewMatrix = &viewMatrix; |
| 889 canDrawArgs.fPath = &path; | 936 canDrawArgs.fPath = &path; |
| 890 canDrawArgs.fStyle = &GrStyle::SimpleFill(); | 937 canDrawArgs.fStyle = &GrStyle::SimpleFill(); |
| 891 canDrawArgs.fAntiAlias = useCoverageAA; | 938 canDrawArgs.fAntiAlias = useCoverageAA; |
| 892 canDrawArgs.fHasUserStencilSettings = hasUserStencilSettings; | 939 canDrawArgs.fHasUserStencilSettings = hasUserStencilSettings; |
| 893 canDrawArgs.fIsStencilBufferMSAA = isStencilBufferMSAA; | 940 canDrawArgs.fIsStencilBufferMSAA = isStencilBufferMSAA; |
| 894 | 941 |
| 895 // Don't allow the SW renderer | 942 // Don't allow the SW renderer |
| 896 GrPathRenderer* pr = fDrawContext->fDrawingManager->getPathRenderer(canDrawA rgs, false, type); | 943 GrPathRenderer* pr = fDrawContext->fDrawingManager->getPathRenderer(canDrawA rgs, false, type); |
| 897 if (!pr) { | 944 if (!pr) { |
| 898 return false; | 945 return false; |
| 899 } | 946 } |
| 900 | 947 |
| 901 GrPaint paint; | 948 GrPaint paint; |
| 902 paint.setCoverageSetOpXPFactory(op, invert); | 949 paint.setCoverageSetOpXPFactory(op, invert); |
| 903 | 950 |
| 904 GrPipelineBuilder pipelineBuilder(paint, fDrawContext->isUnifiedMultisample d()); | |
| 905 pipelineBuilder.setRenderTarget(fDrawContext->accessRenderTarget()); | |
| 906 pipelineBuilder.setUserStencil(ss); | |
| 907 | |
| 908 GrPathRenderer::DrawPathArgs args; | 951 GrPathRenderer::DrawPathArgs args; |
| 909 args.fTarget = fDrawContext->getDrawTarget(); | |
| 910 args.fResourceProvider = fDrawContext->fDrawingManager->getContext()->resour ceProvider(); | 952 args.fResourceProvider = fDrawContext->fDrawingManager->getContext()->resour ceProvider(); |
| 911 args.fPipelineBuilder = &pipelineBuilder; | 953 args.fPaint = &paint; |
| 954 args.fUserStencilSettings = ss; | |
| 955 args.fDrawContext = fDrawContext; | |
| 912 args.fClip = &clip; | 956 args.fClip = &clip; |
| 913 args.fColor = GrColor_WHITE; | 957 args.fColor = GrColor_WHITE; |
| 914 args.fViewMatrix = &viewMatrix; | 958 args.fViewMatrix = &viewMatrix; |
| 915 args.fPath = &path; | 959 args.fPath = &path; |
| 916 args.fStyle = &GrStyle::SimpleFill(); | 960 args.fStyle = &GrStyle::SimpleFill(); |
| 917 args.fAntiAlias = useCoverageAA; | 961 args.fAntiAlias = useCoverageAA; |
| 918 args.fGammaCorrect = fDrawContext->isGammaCorrect(); | 962 args.fGammaCorrect = fDrawContext->isGammaCorrect(); |
| 919 pr->drawPath(args); | 963 pr->drawPath(args); |
| 920 return true; | 964 return true; |
| 921 } | 965 } |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1001 pr = fDrawingManager->getPathRenderer(canDrawArgs, true, type); | 1045 pr = fDrawingManager->getPathRenderer(canDrawArgs, true, type); |
| 1002 } | 1046 } |
| 1003 | 1047 |
| 1004 if (nullptr == pr) { | 1048 if (nullptr == pr) { |
| 1005 #ifdef SK_DEBUG | 1049 #ifdef SK_DEBUG |
| 1006 SkDebugf("Unable to find path renderer compatible with path.\n"); | 1050 SkDebugf("Unable to find path renderer compatible with path.\n"); |
| 1007 #endif | 1051 #endif |
| 1008 return; | 1052 return; |
| 1009 } | 1053 } |
| 1010 | 1054 |
| 1011 GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisampled()); | |
| 1012 pipelineBuilder.setRenderTarget(fRenderTarget.get()); | |
| 1013 | |
| 1014 GrPathRenderer::DrawPathArgs args; | 1055 GrPathRenderer::DrawPathArgs args; |
| 1015 args.fTarget = this->getDrawTarget(); | |
| 1016 args.fResourceProvider = fDrawingManager->getContext()->resourceProvider(); | 1056 args.fResourceProvider = fDrawingManager->getContext()->resourceProvider(); |
| 1017 args.fPipelineBuilder = &pipelineBuilder; | 1057 args.fPaint = &paint; |
| 1058 args.fUserStencilSettings = &GrUserStencilSettings::kUnused; | |
| 1059 args.fDrawContext = this; | |
| 1018 args.fClip = &clip; | 1060 args.fClip = &clip; |
| 1019 args.fColor = paint.getColor(); | 1061 args.fColor = paint.getColor(); |
| 1020 args.fViewMatrix = &viewMatrix; | 1062 args.fViewMatrix = &viewMatrix; |
| 1021 args.fPath = canDrawArgs.fPath; | 1063 args.fPath = canDrawArgs.fPath; |
| 1022 args.fStyle = canDrawArgs.fStyle; | 1064 args.fStyle = canDrawArgs.fStyle; |
| 1023 args.fAntiAlias = useCoverageAA; | 1065 args.fAntiAlias = useCoverageAA; |
| 1024 args.fGammaCorrect = this->isGammaCorrect(); | 1066 args.fGammaCorrect = this->isGammaCorrect(); |
| 1025 pr->drawPath(args); | 1067 pr->drawPath(args); |
| 1026 } | 1068 } |
| 1027 | 1069 |
| 1028 void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, const GrClip& clip, | 1070 void GrDrawContext::drawBatch(const GrPipelineBuilder& pipelineBuilder, const Gr Clip& clip, |
| 1029 GrDrawBatch* batch) { | 1071 GrDrawBatch* batch) { |
| 1030 ASSERT_SINGLE_OWNER | 1072 ASSERT_SINGLE_OWNER |
| 1031 RETURN_IF_ABANDONED | 1073 RETURN_IF_ABANDONED |
| 1032 SkDEBUGCODE(this->validate();) | 1074 SkDEBUGCODE(this->validate();) |
| 1033 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch"); | 1075 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch"); |
| 1034 | 1076 |
| 1035 this->getDrawTarget()->drawBatch(*pipelineBuilder, clip, batch); | 1077 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); |
| 1036 } | 1078 } |
| OLD | NEW |