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

Side by Side Diff: tests/BlurTest.cpp

Issue 2248533002: Update ComputeBlurredRRectParams to compute all the parameters needed for occluded blurred rrect ni… (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix indentation 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 | « src/effects/SkBlurMaskFilter.cpp ('k') | 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 2011 Google Inc. 2 * Copyright 2011 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 "SkBlurMask.h" 8 #include "SkBlurMask.h"
9 #include "SkBlurMaskFilter.h" 9 #include "SkBlurMaskFilter.h"
10 #include "SkBlurDrawLooper.h" 10 #include "SkBlurDrawLooper.h"
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 p.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, 0.01f)); 570 p.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, 0.01f));
571 571
572 canvas->drawRRect(rr, p); 572 canvas->drawRRect(rr, p);
573 } 573 }
574 574
575 #endif 575 #endif
576 576
577 577
578 DEF_TEST(BlurredRRectNinePatchComputation, reporter) { 578 DEF_TEST(BlurredRRectNinePatchComputation, reporter) {
579 const SkRect r = SkRect::MakeXYWH(10, 10, 100, 100); 579 const SkRect r = SkRect::MakeXYWH(10, 10, 100, 100);
580 static const SkScalar kBlurRad = 3.0f;
580 581
581 bool ninePatchable; 582 bool ninePatchable;
582 SkRRect rrectToDraw; 583 SkRRect rrectToDraw;
583 SkISize size; 584 SkISize size;
584 SkScalar xs[4], ys[4]; 585 SkScalar rectXs[SkBlurMaskFilter::kMaxDivisions], rectYs[SkBlurMaskFilter::k MaxDivisions];
585 int numXs, numYs; 586 SkScalar texXs[SkBlurMaskFilter::kMaxDivisions], texYs[SkBlurMaskFilter::kMa xDivisions];
587 int numX, numY;
588 uint32_t skipMask;
586 589
587 // not nine-patchable 590 // not nine-patchable
588 { 591 {
589 SkVector radii[4] = { { 100, 100 }, { 0, 0 }, { 100, 100 }, { 0, 0 } }; 592 SkVector radii[4] = { { 100, 100 }, { 0, 0 }, { 100, 100 }, { 0, 0 } };
590 593
591 SkRRect rr; 594 SkRRect rr;
592 rr.setRectRadii(r, radii); 595 rr.setRectRadii(r, radii);
593 596
594 ninePatchable = SkBlurMaskFilter::ComputeBlurredRRectParams(rr, 3.0f, &r rectToDraw, &size, 597 ninePatchable = SkBlurMaskFilter::ComputeBlurredRRectParams(rr, rr, SkRe ct::MakeEmpty(),
595 xs, &numXs, ys, &numYs); 598 kBlurRad, kB lurRad,
599 &rrectToDraw , &size,
600 rectXs, rect Ys, texXs, texYs,
601 &numX, &numY , &skipMask);
596 REPORTER_ASSERT(reporter, !ninePatchable); 602 REPORTER_ASSERT(reporter, !ninePatchable);
597 } 603 }
598 604
599 // simple circular 605 // simple circular
600 { 606 {
607 static const SkScalar kCornerRad = 10.0f;
601 SkRRect rr; 608 SkRRect rr;
602 rr.setRectXY(r, 10, 10); 609 rr.setRectXY(r, kCornerRad, kCornerRad);
603 610
604 ninePatchable = SkBlurMaskFilter::ComputeBlurredRRectParams(rr, 3.0f, &r rectToDraw, &size, 611 ninePatchable = SkBlurMaskFilter::ComputeBlurredRRectParams(rr, rr, SkRe ct::MakeEmpty(),
605 xs, &numXs, ys, &numYs); 612 kBlurRad, kB lurRad,
613 &rrectToDraw , &size,
614 rectXs, rect Ys, texXs, texYs,
615 &numX, &numY , &skipMask);
616
617 static const SkScalar kAns = 12.0f * kBlurRad + 2.0f * kCornerRad + 1.0f ;
606 REPORTER_ASSERT(reporter, ninePatchable); 618 REPORTER_ASSERT(reporter, ninePatchable);
607 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(SkIntToScalar(size.fWidth) , 57.0f)); 619 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(SkIntToScalar(size.fWidth) , kAns));
608 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(SkIntToScalar(size.fHeight ), 57.0)); 620 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(SkIntToScalar(size.fHeight ), kAns));
609 REPORTER_ASSERT(reporter, 4 == numXs && 4 == numYs); 621 REPORTER_ASSERT(reporter, 4 == numX && 4 == numY);
610 for (int i = 0; i < numXs; ++i) { 622 REPORTER_ASSERT(reporter, !skipMask);
611 REPORTER_ASSERT(reporter, xs[i] >= 0.0f && xs[i] <= 1.0f);
612 }
613 for (int i = 0; i < numYs; ++i) {
614 REPORTER_ASSERT(reporter, ys[i] >= 0.0f && ys[i] <= 1.0f);
615 }
616 } 623 }
617 624
618 // simple elliptical 625 // simple elliptical
619 { 626 {
627 static const SkScalar kXCornerRad = 2.0f;
628 static const SkScalar kYCornerRad = 10.0f;
620 SkRRect rr; 629 SkRRect rr;
621 rr.setRectXY(r, 2, 10); 630 rr.setRectXY(r, kXCornerRad, kYCornerRad);
622 631
623 ninePatchable = SkBlurMaskFilter::ComputeBlurredRRectParams(rr, 3.0f, &r rectToDraw, &size, 632 ninePatchable = SkBlurMaskFilter::ComputeBlurredRRectParams(rr, rr, SkRe ct::MakeEmpty(),
624 xs, &numXs, ys, &numYs); 633 kBlurRad, kB lurRad,
634 &rrectToDraw , &size,
635 rectXs, rect Ys, texXs, texYs,
636 &numX, &numY , &skipMask);
637
638 static const SkScalar kXAns = 12.0f * kBlurRad + 2.0f * kXCornerRad + 1. 0f;
639 static const SkScalar kYAns = 12.0f * kBlurRad + 2.0f * kYCornerRad + 1. 0f;
640
625 REPORTER_ASSERT(reporter, ninePatchable); 641 REPORTER_ASSERT(reporter, ninePatchable);
626 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(SkIntToScalar(size.fWidth) , 41.0f)); 642 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(SkIntToScalar(size.fWidth) , kXAns));
627 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(SkIntToScalar(size.fHeight ), 57.0)); 643 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(SkIntToScalar(size.fHeight ), kYAns));
628 REPORTER_ASSERT(reporter, 4 == numXs && 4 == numYs); 644 REPORTER_ASSERT(reporter, 4 == numX && 4 == numY);
629 for (int i = 0; i < numXs; ++i) { 645 REPORTER_ASSERT(reporter, !skipMask);
630 REPORTER_ASSERT(reporter, xs[i] >= 0.0f && xs[i] <= 1.0f); 646 }
647
648 // test-out occlusion
649 {
650 static const SkScalar kCornerRad = 10.0f;
651 SkRRect rr;
652 rr.setRectXY(r, kCornerRad, kCornerRad);
653
654 // The rectXs & rectYs should be { 1, 29, 91, 119 }. Add two more points around each.
655 SkScalar testLocs[] = {
656 -18.0f, -9.0f,
657 1.0f,
658 9.0f, 18.0f,
659 29.0f,
660 39.0f, 49.0f,
661 91.0f,
662 109.0f, 118.0f,
663 119.0f,
664 139.0f, 149.0f
665 };
666
667 for (int minY = 0; minY < (int)SK_ARRAY_COUNT(testLocs); ++minY) {
668 for (int maxY = minY+1; maxY < (int)SK_ARRAY_COUNT(testLocs); ++maxY ) {
669 for (int minX = 0; minX < (int)SK_ARRAY_COUNT(testLocs); ++minX) {
670 for (int maxX = minX+1; maxX < (int)SK_ARRAY_COUNT(testLocs) ; ++maxX) {
671 SkRect occluder = SkRect::MakeLTRB(testLocs[minX], testL ocs[minY],
672 testLocs[maxX], testL ocs[maxY]);
673 if (occluder.isEmpty()) {
674 continue;
675 }
676
677 ninePatchable = SkBlurMaskFilter::ComputeBlurredRRectPar ams(
678 rr, rr, occl uder,
679 kBlurRad, kB lurRad,
680 &rrectToDraw , &size,
681 rectXs, rect Ys, texXs, texYs,
682 &numX, &numY , &skipMask);
683
684 static const SkScalar kAns = 12.0f * kBlurRad + 2.0f * k CornerRad + 1.0f;
685 REPORTER_ASSERT(reporter, ninePatchable);
686 REPORTER_ASSERT(reporter,
687 SkScalarNearlyEqual(SkIntToScalar(si ze.fWidth), kAns));
688 REPORTER_ASSERT(reporter,
689 SkScalarNearlyEqual(SkIntToScalar(si ze.fHeight), kAns));
690
691 int checkBit = 0x1;
692 for (int y = 0; y < numY-1; ++y) {
693 for (int x = 0; x < numX-1; ++x) {
694 SkRect cell = SkRect::MakeLTRB(rectXs[x], rectYs [y],
695 rectXs[x+1], rect Ys[y+1]);
696 REPORTER_ASSERT(reporter,
697 SkToBool(skipMask & checkBit ) ==
698 (cell.isEmpty() || occluder. contains(cell)));
699
700 REPORTER_ASSERT(reporter, texXs[x] >= 0 &&
701 texXs[x] <= size.fWidt h);
702 REPORTER_ASSERT(reporter, texYs[y] >= 0 &&
703 texXs[y] <= size.fHeig ht);
704
705 checkBit <<= 1;
706 }
707 }
708 }
709 }
710 }
631 } 711 }
632 for (int i = 0; i < numYs; ++i) { 712
633 REPORTER_ASSERT(reporter, ys[i] >= 0.0f && ys[i] <= 1.0f); 713
634 }
635 } 714 }
636 715
637 } 716 }
638 717
639 //////////////////////////////////////////////////////////////////////////////// /////////// 718 //////////////////////////////////////////////////////////////////////////////// ///////////
OLDNEW
« no previous file with comments | « src/effects/SkBlurMaskFilter.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698