Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(170)

Side by Side Diff: src/gpu/GrDrawContext.cpp

Issue 2183223002: Implement coverage AA for skewed rects with local coords (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Implement coverage AA for skewed rects with local coords Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698