aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2015-12-07 09:28:34 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2015-12-07 09:28:34 -0800
commitf65fb658147da97b5010276fe99f15952e6333e3 (patch)
tree3ac75ad62f8cc853fa26bcbd870dded4f2778a56
parent9d344069c5d45a936823d3f84999898383a026cd (diff)
add gm to exercise large sigmas
BUG=skia:4437 TBR= Review URL: https://codereview.chromium.org/1503143002
-rw-r--r--gm/imagefilters.cpp43
1 files changed, 42 insertions, 1 deletions
diff --git a/gm/imagefilters.cpp b/gm/imagefilters.cpp
index 1998014bbf..af2c776ce1 100644
--- a/gm/imagefilters.cpp
+++ b/gm/imagefilters.cpp
@@ -6,8 +6,11 @@
*/
#include "gm.h"
-#include "SkImageFilter.h"
+#include "SkBlurImageFilter.h"
#include "SkColorMatrixFilter.h"
+#include "SkImage.h"
+#include "SkImageFilter.h"
+#include "SkSurface.h"
/**
* Test drawing a primitive w/ an imagefilter (in this case, just matrix w/ identity) to see
@@ -62,3 +65,41 @@ DEF_SIMPLE_GM(imagefilters_xfermodes, canvas, 480, 480) {
canvas->translate(0, 240);
}
}
+
+static SkImage* make_image(SkCanvas* canvas) {
+ const SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100);
+ SkAutoTUnref<SkSurface> surface(canvas->newSurface(info));
+ if (!surface) {
+ surface.reset(SkSurface::NewRaster(info));
+ }
+ surface->getCanvas()->drawRect(SkRect::MakeXYWH(25, 25, 50, 50), SkPaint());
+ return surface->newImageSnapshot();
+}
+
+// Compare blurs when we're tightly clipped (fast) and not as tightly (slower)
+//
+// Expect the two to draw the same (modulo the extra border of pixels when the clip is larger)
+//
+DEF_SIMPLE_GM(fast_slow_blurimagefilter, canvas, 620, 260) {
+ SkAutoTUnref<SkImage> image(make_image(canvas));
+ const SkRect r = SkRect::MakeIWH(image->width(), image->height());
+
+ canvas->translate(10, 10);
+ for (SkScalar sigma = 8; sigma <= 128; sigma *= 2) {
+ SkPaint paint;
+ paint.setImageFilter(SkBlurImageFilter::Create(sigma, sigma))->unref();
+
+ canvas->save();
+ // we outset the clip by 1, to fall out of the fast-case in drawImage
+ // i.e. the clip is larger than the image
+ for (SkScalar outset = 0; outset <= 1; ++outset) {
+ canvas->save();
+ canvas->clipRect(r.makeOutset(outset, outset));
+ canvas->drawImage(image, 0, 0, &paint);
+ canvas->restore();
+ canvas->translate(0, r.height() + 20);
+ }
+ canvas->restore();
+ canvas->translate(r.width() + 20, 0);
+ }
+}