| Index: tests/ImageFilterTest.cpp
|
| diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp
|
| index 7d465c15e625683ef7b0e11a62da19d57668a12d..cfba1fa87df55fcde08f13dbc47f538dd3241159 100644
|
| --- a/tests/ImageFilterTest.cpp
|
| +++ b/tests/ImageFilterTest.cpp
|
| @@ -317,6 +317,58 @@ DEF_TEST(HugeBlurImageFilter, reporter) {
|
| test_huge_blur(&device, reporter);
|
| }
|
|
|
| +static void test_xfermode_cropped_input(SkBaseDevice* device, skiatest::Reporter* reporter) {
|
| + SkCanvas canvas(device);
|
| + canvas.clear(0);
|
| +
|
| + SkBitmap bitmap;
|
| + bitmap.allocN32Pixels(1, 1);
|
| + bitmap.eraseARGB(255, 255, 255, 255);
|
| +
|
| + SkAutoTUnref<SkColorFilter> green(
|
| + SkColorFilter::CreateModeFilter(SK_ColorGREEN, SkXfermode::kSrcIn_Mode));
|
| + SkAutoTUnref<SkColorFilterImageFilter> greenFilter(
|
| + SkColorFilterImageFilter::Create(green.get()));
|
| + SkImageFilter::CropRect cropRect(SkRect::MakeEmpty());
|
| + SkAutoTUnref<SkColorFilterImageFilter> croppedOut(
|
| + SkColorFilterImageFilter::Create(green.get(), NULL, &cropRect));
|
| +
|
| + // Check that an xfermode image filter whose input has been cropped out still draws the other
|
| + // input. Also check that drawing with both inputs cropped out doesn't cause a GPU warning.
|
| + SkXfermode* mode = SkXfermode::Create(SkXfermode::kSrcOver_Mode);
|
| + SkAutoTUnref<SkImageFilter> xfermodeNoFg(
|
| + SkXfermodeImageFilter::Create(mode, greenFilter, croppedOut));
|
| + SkAutoTUnref<SkImageFilter> xfermodeNoBg(
|
| + SkXfermodeImageFilter::Create(mode, croppedOut, greenFilter));
|
| + SkAutoTUnref<SkImageFilter> xfermodeNoFgNoBg(
|
| + SkXfermodeImageFilter::Create(mode, croppedOut, croppedOut));
|
| +
|
| + SkPaint paint;
|
| + paint.setImageFilter(xfermodeNoFg);
|
| + canvas.drawSprite(bitmap, 0, 0, &paint);
|
| +
|
| + uint32_t pixel;
|
| + SkImageInfo info = SkImageInfo::MakeN32Premul(1, 1);
|
| + canvas.readPixels(info, &pixel, 4, 0, 0);
|
| + REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN);
|
| +
|
| + paint.setImageFilter(xfermodeNoBg);
|
| + canvas.drawSprite(bitmap, 0, 0, &paint);
|
| + canvas.readPixels(info, &pixel, 4, 0, 0);
|
| + REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN);
|
| +
|
| + paint.setImageFilter(xfermodeNoFgNoBg);
|
| + canvas.drawSprite(bitmap, 0, 0, &paint);
|
| + canvas.readPixels(info, &pixel, 4, 0, 0);
|
| + REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN);
|
| +}
|
| +
|
| +DEF_TEST(XfermodeImageFilterCroppedInput, reporter) {
|
| + SkBitmap temp;
|
| + temp.allocN32Pixels(100, 100);
|
| + SkBitmapDevice device(temp);
|
| + test_xfermode_cropped_input(&device, reporter);
|
| +}
|
|
|
| #if SK_SUPPORT_GPU
|
| DEF_GPUTEST(ImageFilterCropRectGPU, reporter, factory) {
|
| @@ -334,4 +386,12 @@ DEF_GPUTEST(HugeBlurImageFilterGPU, reporter, factory) {
|
| 0));
|
| test_huge_blur(device, reporter);
|
| }
|
| +
|
| +DEF_GPUTEST(XfermodeImageFilterCroppedInputGPU, reporter, factory) {
|
| + GrContext* context = factory->get(static_cast<GrContextFactory::GLContextType>(0));
|
| + SkAutoTUnref<SkGpuDevice> device(SkGpuDevice::Create(context,
|
| + SkImageInfo::MakeN32Premul(1, 1),
|
| + 0));
|
| + test_xfermode_cropped_input(device, reporter);
|
| +}
|
| #endif
|
|
|