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

Unified Diff: tests/ImageFilterTest.cpp

Issue 1813373002: Make SkComposeImageFilter::onFilterImage filter the bounds given to the inner filter. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: skip innerClipBounds initialization per senorblanco Created 4 years, 9 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/SkComposeImageFilter.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 6a2f94265882269bb1a4e1fa4e38307df073124d..b9b0028f2d731c4bf7377e283a91740d42facd87 100644
--- a/tests/ImageFilterTest.cpp
+++ b/tests/ImageFilterTest.cpp
@@ -1369,6 +1369,51 @@ DEF_GPUTEST_FOR_NATIVE_CONTEXT(ComposedImageFilterOffset_Gpu, reporter, context)
}
#endif
+static void test_composed_imagefilter_bounds(SkImageFilter::Proxy* proxy,
+ skiatest::Reporter* reporter,
+ GrContext* context) {
+ // The bounds passed to the inner filter must be filtered by the outer
+ // filter, so that the inner filter produces the pixels that the outer
+ // filter requires as input. This matters if the outer filter moves pixels.
+ // Here, accounting for the outer offset is necessary so that the green
+ // pixels of the picture are not clipped.
+
+ SkPictureRecorder recorder;
+ SkCanvas* recordingCanvas = recorder.beginRecording(SkRect::MakeWH(200, 100));
+ recordingCanvas->clipRect(SkRect::MakeXYWH(100, 0, 100, 100));
+ recordingCanvas->clear(SK_ColorGREEN);
+ sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
+ sk_sp<SkImageFilter> pictureFilter(
+ SkPictureImageFilter::Create(picture.get()));
+ SkImageFilter::CropRect cropRect(SkRect::MakeWH(100, 100));
+ sk_sp<SkImageFilter> offsetFilter(SkOffsetImageFilter::Create(-100, 0, nullptr, &cropRect));
+ sk_sp<SkImageFilter> composedFilter(
+ SkComposeImageFilter::Create(offsetFilter.get(), pictureFilter.get()));
+
+ sk_sp<SkSpecialImage> sourceImage(create_empty_special_image(context, proxy, 100));
+ SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nullptr);
+ SkIPoint offset;
+ sk_sp<SkSpecialImage> result(composedFilter->filterImage(sourceImage.get(), ctx, &offset));
+ REPORTER_ASSERT(reporter, offset.isZero());
+ REPORTER_ASSERT(reporter, result);
+ REPORTER_ASSERT(reporter, result->subset().size() == SkISize::Make(100, 100));
+
+ SkBitmap resultBM;
+ TestingSpecialImageAccess::GetROPixels(result.get(), &resultBM);
+ SkAutoLockPixels lock(resultBM);
+ REPORTER_ASSERT(reporter, resultBM.getColor(50, 50) == SK_ColorGREEN);
+}
+
+DEF_TEST(ComposedImageFilterBounds, reporter) {
+ run_raster_test(reporter, 100, test_composed_imagefilter_bounds);
+}
+
+#if SK_SUPPORT_GPU
+DEF_GPUTEST_FOR_NATIVE_CONTEXT(ComposedImageFilterBounds_Gpu, reporter, context) {
+ run_gpu_test(reporter, context, 100, test_composed_imagefilter_bounds);
+}
+#endif
+
static void test_partial_crop_rect(SkImageFilter::Proxy* proxy,
skiatest::Reporter* reporter,
GrContext* context) {
« no previous file with comments | « src/effects/SkComposeImageFilter.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698