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

Unified Diff: tests/ImageFilterTest.cpp

Issue 555603002: Allow negative values in SkBlurImageFilter sigma. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix re: sugoi's comment Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/effects/SkBlurImageFilter.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/ImageFilterTest.cpp
diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp
index ebe9c4dfefae8a3db1d295d098a6108b532e84d6..8b6e4285caa61f4f7b67e4e58fd09c260a678284 100644
--- a/tests/ImageFilterTest.cpp
+++ b/tests/ImageFilterTest.cpp
@@ -307,6 +307,63 @@ static SkBitmap make_gradient_circle(int width, int height) {
return bitmap;
}
+static void test_negative_blur_sigma(SkBaseDevice* device, skiatest::Reporter* reporter) {
+ // Check that SkBlurImageFilter will accept a negative sigma, either in
+ // the given arguments or after CTM application.
+ int width = 32, height = 32;
+ SkDeviceImageFilterProxy proxy(device);
+ SkScalar five = SkIntToScalar(5);
+
+ SkAutoTUnref<SkBlurImageFilter> positiveFilter(
+ SkBlurImageFilter::Create(five, five)
+ );
+
+ SkAutoTUnref<SkBlurImageFilter> negativeFilter(
+ SkBlurImageFilter::Create(-five, five)
+ );
+
+ SkBitmap gradient = make_gradient_circle(width, height);
+ SkBitmap positiveResult1, negativeResult1;
+ SkBitmap positiveResult2, negativeResult2;
+ SkIPoint offset;
+ SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeLargest(), NULL);
+ positiveFilter->filterImage(&proxy, gradient, ctx, &positiveResult1, &offset);
+ negativeFilter->filterImage(&proxy, gradient, ctx, &negativeResult1, &offset);
+ SkMatrix negativeScale;
+ negativeScale.setScale(-SK_Scalar1, SK_Scalar1);
+ SkImageFilter::Context negativeCTX(negativeScale, SkIRect::MakeLargest(), NULL);
+ positiveFilter->filterImage(&proxy, gradient, negativeCTX, &negativeResult2, &offset);
+ negativeFilter->filterImage(&proxy, gradient, negativeCTX, &positiveResult2, &offset);
+ SkAutoLockPixels lockP1(positiveResult1);
+ SkAutoLockPixels lockP2(positiveResult2);
+ SkAutoLockPixels lockN1(negativeResult1);
+ SkAutoLockPixels lockN2(negativeResult2);
+ for (int y = 0; y < height; y++) {
+ int diffs = memcmp(positiveResult1.getAddr32(0, y), negativeResult1.getAddr32(0, y), positiveResult1.rowBytes());
+ REPORTER_ASSERT(reporter, !diffs);
+ if (diffs) {
+ break;
+ }
+ diffs = memcmp(positiveResult1.getAddr32(0, y), negativeResult2.getAddr32(0, y), positiveResult1.rowBytes());
+ REPORTER_ASSERT(reporter, !diffs);
+ if (diffs) {
+ break;
+ }
+ diffs = memcmp(positiveResult1.getAddr32(0, y), positiveResult2.getAddr32(0, y), positiveResult1.rowBytes());
+ REPORTER_ASSERT(reporter, !diffs);
+ if (diffs) {
+ break;
+ }
+ }
+}
+
+DEF_TEST(TestNegativeBlurSigma, reporter) {
+ SkBitmap temp;
+ temp.allocN32Pixels(100, 100);
+ SkBitmapDevice device(temp);
+ test_negative_blur_sigma(&device, reporter);
+}
+
DEF_TEST(ImageFilterDrawTiled, reporter) {
// Check that all filters when drawn tiled (with subsequent clip rects) exactly
// match the same filters drawn with a single full-canvas bitmap draw.
@@ -966,4 +1023,12 @@ DEF_GPUTEST(XfermodeImageFilterCroppedInputGPU, reporter, factory) {
0));
test_xfermode_cropped_input(device, reporter);
}
+
+DEF_GPUTEST(TestNegativeBlurSigmaGPU, reporter, factory) {
+ GrContext* context = factory->get(static_cast<GrContextFactory::GLContextType>(0));
+ SkAutoTUnref<SkGpuDevice> device(SkGpuDevice::Create(context,
+ SkImageInfo::MakeN32Premul(1, 1),
+ 0));
+ test_negative_blur_sigma(device, reporter);
+}
#endif
« no previous file with comments | « src/effects/SkBlurImageFilter.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698