| 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 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 609 SkDEBUGCODE(this->validate();) | 609 SkDEBUGCODE(this->validate();) |
| 610 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectToRect"); | 610 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectToRect"); |
| 611 | 611 |
| 612 SkRect croppedRect = rectToDraw; | 612 SkRect croppedRect = rectToDraw; |
| 613 SkRect croppedLocalRect = localRect; | 613 SkRect croppedLocalRect = localRect; |
| 614 if (!crop_filled_rect(fRenderTarget.get(), clip, viewMatrix, &croppedRect, &
croppedLocalRect)) { | 614 if (!crop_filled_rect(fRenderTarget.get(), clip, viewMatrix, &croppedRect, &
croppedLocalRect)) { |
| 615 return; | 615 return; |
| 616 } | 616 } |
| 617 | 617 |
| 618 AutoCheckFlush acf(fDrawingManager); | 618 AutoCheckFlush acf(fDrawingManager); |
| 619 SkAutoTUnref<GrDrawBatch> batch; | |
| 620 bool useHWAA; | 619 bool useHWAA; |
| 621 | 620 |
| 622 if (InstancedRendering* ir = this->getDrawTarget()->instancedRendering()) { | 621 if (InstancedRendering* ir = this->getDrawTarget()->instancedRendering()) { |
| 623 batch.reset(ir->recordRect(croppedRect, viewMatrix, paint.getColor(), cr
oppedLocalRect, | 622 SkAutoTUnref<GrDrawBatch> batch(ir->recordRect(croppedRect, viewMatrix,
paint.getColor(), |
| 624 paint.isAntiAlias(), fInstancedPipelineInfo,
&useHWAA)); | 623 croppedLocalRect, paint.i
sAntiAlias(), |
| 624 fInstancedPipelineInfo, &
useHWAA)); |
| 625 if (batch) { | 625 if (batch) { |
| 626 GrPipelineBuilder pipelineBuilder(paint, useHWAA); | 626 GrPipelineBuilder pipelineBuilder(paint, useHWAA); |
| 627 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch)
; | 627 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch)
; |
| 628 return; | 628 return; |
| 629 } | 629 } |
| 630 } | 630 } |
| 631 | 631 |
| 632 if (should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA) && | 632 if (!should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA)) { |
| 633 view_matrix_ok_for_aa_fill_rect(viewMatrix)) { | |
| 634 batch.reset(GrAAFillRectBatch::CreateWithLocalRect(paint.getColor(), vie
wMatrix, | |
| 635 croppedRect, croppedL
ocalRect)); | |
| 636 if (batch) { | |
| 637 GrPipelineBuilder pipelineBuilder(paint, useHWAA); | |
| 638 this->drawBatch(pipelineBuilder, clip, batch); | |
| 639 return; | |
| 640 } | |
| 641 } else { | |
| 642 this->drawNonAAFilledRect(clip, paint, viewMatrix, croppedRect, &cropped
LocalRect, | 633 this->drawNonAAFilledRect(clip, paint, viewMatrix, croppedRect, &cropped
LocalRect, |
| 643 nullptr, nullptr); | 634 nullptr, nullptr); |
| 635 return; |
| 644 } | 636 } |
| 645 | 637 |
| 638 if (view_matrix_ok_for_aa_fill_rect(viewMatrix)) { |
| 639 SkAutoTUnref<GrDrawBatch> batch(GrAAFillRectBatch::CreateWithLocalRect(p
aint.getColor(), |
| 640 v
iewMatrix, |
| 641 c
roppedRect, |
| 642 c
roppedLocalRect)); |
| 643 GrPipelineBuilder pipelineBuilder(paint, useHWAA); |
| 644 this->drawBatch(pipelineBuilder, clip, batch); |
| 645 return; |
| 646 } |
| 647 |
| 648 SkMatrix viewAndUnLocalMatrix; |
| 649 if (!viewAndUnLocalMatrix.setRectToRect(localRect, rectToDraw, SkMatrix::kFi
ll_ScaleToFit)) { |
| 650 SkDebugf("fillRectToRect called with empty local matrix.\n"); |
| 651 return; |
| 652 } |
| 653 viewAndUnLocalMatrix.postConcat(viewMatrix); |
| 654 |
| 655 SkPath path; |
| 656 path.setIsVolatile(true); |
| 657 path.addRect(localRect); |
| 658 this->internalDrawPath(clip, paint, viewAndUnLocalMatrix, path, GrStyle()); |
| 646 } | 659 } |
| 647 | 660 |
| 648 void GrDrawContext::fillRectWithLocalMatrix(const GrClip& clip, | 661 void GrDrawContext::fillRectWithLocalMatrix(const GrClip& clip, |
| 649 const GrPaint& paint, | 662 const GrPaint& paint, |
| 650 const SkMatrix& viewMatrix, | 663 const SkMatrix& viewMatrix, |
| 651 const SkRect& rectToDraw, | 664 const SkRect& rectToDraw, |
| 652 const SkMatrix& localMatrix) { | 665 const SkMatrix& localMatrix) { |
| 653 ASSERT_SINGLE_OWNER | 666 ASSERT_SINGLE_OWNER |
| 654 RETURN_IF_ABANDONED | 667 RETURN_IF_ABANDONED |
| 655 SkDEBUGCODE(this->validate();) | 668 SkDEBUGCODE(this->validate();) |
| 656 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectWithLocalMatr
ix"); | 669 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectWithLocalMatr
ix"); |
| 657 | 670 |
| 658 SkRect croppedRect = rectToDraw; | 671 SkRect croppedRect = rectToDraw; |
| 659 if (!crop_filled_rect(fRenderTarget.get(), clip, viewMatrix, &croppedRect))
{ | 672 if (!crop_filled_rect(fRenderTarget.get(), clip, viewMatrix, &croppedRect))
{ |
| 660 return; | 673 return; |
| 661 } | 674 } |
| 662 | 675 |
| 663 AutoCheckFlush acf(fDrawingManager); | 676 AutoCheckFlush acf(fDrawingManager); |
| 664 SkAutoTUnref<GrDrawBatch> batch; | |
| 665 bool useHWAA; | 677 bool useHWAA; |
| 666 | 678 |
| 667 if (InstancedRendering* ir = this->getDrawTarget()->instancedRendering()) { | 679 if (InstancedRendering* ir = this->getDrawTarget()->instancedRendering()) { |
| 668 batch.reset(ir->recordRect(croppedRect, viewMatrix, paint.getColor(), lo
calMatrix, | 680 SkAutoTUnref<GrDrawBatch> batch(ir->recordRect(croppedRect, viewMatrix,
paint.getColor(), |
| 669 paint.isAntiAlias(), fInstancedPipelineInfo,
&useHWAA)); | 681 localMatrix, paint.isAnti
Alias(), |
| 682 fInstancedPipelineInfo, &
useHWAA)); |
| 670 if (batch) { | 683 if (batch) { |
| 671 GrPipelineBuilder pipelineBuilder(paint, useHWAA); | 684 GrPipelineBuilder pipelineBuilder(paint, useHWAA); |
| 672 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch)
; | 685 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch)
; |
| 673 return; | 686 return; |
| 674 } | 687 } |
| 675 } | 688 } |
| 676 | 689 |
| 677 if (should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA) && | 690 if (!should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA)) { |
| 678 view_matrix_ok_for_aa_fill_rect(viewMatrix)) { | 691 this->drawNonAAFilledRect(clip, paint, viewMatrix, croppedRect, nullptr, |
| 679 batch.reset(GrAAFillRectBatch::Create(paint.getColor(), viewMatrix, loca
lMatrix, | 692 &localMatrix, nullptr); |
| 680 croppedRect)); | 693 return; |
| 694 } |
| 695 |
| 696 if (view_matrix_ok_for_aa_fill_rect(viewMatrix)) { |
| 697 SkAutoTUnref<GrDrawBatch> batch(GrAAFillRectBatch::Create(paint.getColor
(), viewMatrix, |
| 698 localMatrix, c
roppedRect)); |
| 681 GrPipelineBuilder pipelineBuilder(paint, useHWAA); | 699 GrPipelineBuilder pipelineBuilder(paint, useHWAA); |
| 682 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); | 700 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); |
| 683 } else { | 701 return; |
| 684 this->drawNonAAFilledRect(clip, paint, viewMatrix, croppedRect, nullptr, | |
| 685 &localMatrix, nullptr); | |
| 686 } | 702 } |
| 687 | 703 |
| 704 SkMatrix viewAndUnLocalMatrix; |
| 705 if (!localMatrix.invert(&viewAndUnLocalMatrix)) { |
| 706 SkDebugf("fillRectWithLocalMatrix called with degenerate local matrix.\n
"); |
| 707 return; |
| 708 } |
| 709 viewAndUnLocalMatrix.postConcat(viewMatrix); |
| 710 |
| 711 SkPath path; |
| 712 path.setIsVolatile(true); |
| 713 path.addRect(rectToDraw); |
| 714 path.transform(localMatrix); |
| 715 this->internalDrawPath(clip, paint, viewAndUnLocalMatrix, path, GrStyle()); |
| 688 } | 716 } |
| 689 | 717 |
| 690 void GrDrawContext::drawVertices(const GrClip& clip, | 718 void GrDrawContext::drawVertices(const GrClip& clip, |
| 691 const GrPaint& paint, | 719 const GrPaint& paint, |
| 692 const SkMatrix& viewMatrix, | 720 const SkMatrix& viewMatrix, |
| 693 GrPrimitiveType primitiveType, | 721 GrPrimitiveType primitiveType, |
| 694 int vertexCount, | 722 int vertexCount, |
| 695 const SkPoint positions[], | 723 const SkPoint positions[], |
| 696 const SkPoint texCoords[], | 724 const SkPoint texCoords[], |
| 697 const GrColor colors[], | 725 const GrColor colors[], |
| (...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1244 | 1272 |
| 1245 void GrDrawContext::drawBatch(const GrPipelineBuilder& pipelineBuilder, const Gr
Clip& clip, | 1273 void GrDrawContext::drawBatch(const GrPipelineBuilder& pipelineBuilder, const Gr
Clip& clip, |
| 1246 GrDrawBatch* batch) { | 1274 GrDrawBatch* batch) { |
| 1247 ASSERT_SINGLE_OWNER | 1275 ASSERT_SINGLE_OWNER |
| 1248 RETURN_IF_ABANDONED | 1276 RETURN_IF_ABANDONED |
| 1249 SkDEBUGCODE(this->validate();) | 1277 SkDEBUGCODE(this->validate();) |
| 1250 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch"); | 1278 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch"); |
| 1251 | 1279 |
| 1252 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); | 1280 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); |
| 1253 } | 1281 } |
| OLD | NEW |