Index: tests/ImageFilterTest.cpp |
diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp |
index f936a7a3000f3a5631aaaf553cbd05601a6a85ee..5a411077344221184d4bee3bf6b991aefdc9777f 100644 |
--- a/tests/ImageFilterTest.cpp |
+++ b/tests/ImageFilterTest.cpp |
@@ -26,6 +26,11 @@ |
#include "SkXfermodeImageFilter.h" |
#include "Test.h" |
+#if SK_SUPPORT_GPU |
+#include "GrContextFactory.h" |
+#include "SkGpuDevice.h" |
+#endif |
+ |
static const int kBitmapSize = 4; |
static void make_small_bitmap(SkBitmap& bitmap) { |
@@ -156,64 +161,77 @@ DEF_TEST(ImageFilter, reporter) { |
!bicubic->filterImage(&proxy, bitmap, SkMatrix::I(), &result, &loc)); |
} |
} |
+} |
- { |
- // Check that all filters offset to their absolute crop rect, |
- // unaffected by the input crop rect. |
- // Tests pass by not asserting. |
- SkBitmap bitmap, temp; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 100, 100); |
- temp.setConfig(SkBitmap::kARGB_8888_Config, 100, 100); |
- bitmap.allocPixels(); |
- temp.allocPixels(); |
- bitmap.eraseARGB(0, 0, 0, 0); |
- SkBitmapDevice device(temp); |
- SkDeviceImageFilterProxy proxy(&device); |
- |
- SkImageFilter::CropRect inputCropRect(SkRect::MakeXYWH(8, 13, 80, 80)); |
- SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(20, 30, 60, 60)); |
- SkAutoTUnref<SkImageFilter> input(make_grayscale(NULL, &inputCropRect)); |
- |
- SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateModeFilter(SK_ColorRED, SkXfermode::kSrcIn_Mode)); |
- SkPoint3 location(0, 0, SK_Scalar1); |
- SkPoint3 target(SK_Scalar1, SK_Scalar1, SK_Scalar1); |
- SkScalar kernel[9] = { |
- SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), |
- SkIntToScalar( 1), SkIntToScalar(-7), SkIntToScalar( 1), |
- SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), |
- }; |
- SkISize kernelSize = SkISize::Make(3, 3); |
- SkScalar gain = SK_Scalar1, bias = 0; |
- |
- SkImageFilter* filters[] = { |
- SkColorFilterImageFilter::Create(cf.get(), input.get(), &cropRect), |
- new SkDisplacementMapEffect(SkDisplacementMapEffect::kR_ChannelSelectorType, |
- SkDisplacementMapEffect::kB_ChannelSelectorType, |
- 40.0f, input.get(), input.get(), &cropRect), |
- new SkBlurImageFilter(SK_Scalar1, SK_Scalar1, input.get(), &cropRect), |
- new SkDropShadowImageFilter(SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN, input.get(), &cropRect), |
- SkLightingImageFilter::CreatePointLitDiffuse(location, SK_ColorGREEN, 0, 0, input.get(), &cropRect), |
- SkLightingImageFilter::CreatePointLitSpecular(location, SK_ColorGREEN, 0, 0, 0, input.get(), &cropRect), |
- new SkMatrixConvolutionImageFilter(kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1), SkMatrixConvolutionImageFilter::kRepeat_TileMode, false, input.get(), &cropRect), |
- new SkMergeImageFilter(input.get(), input.get(), SkXfermode::kSrcOver_Mode, &cropRect), |
- new SkOffsetImageFilter(SK_Scalar1, SK_Scalar1, input.get(), &cropRect), |
- new SkOffsetImageFilter(SK_Scalar1, SK_Scalar1, input.get(), &cropRect), |
- new SkDilateImageFilter(3, 2, input.get(), &cropRect), |
- new SkErodeImageFilter(2, 3, input.get(), &cropRect), |
- new SkTileImageFilter(inputCropRect.rect(), cropRect.rect(), input.get()), |
- new SkXfermodeImageFilter(SkXfermode::Create(SkXfermode::kSrcOver_Mode), input.get(), input.get(), &cropRect), |
- }; |
- |
- for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { |
- SkImageFilter* filter = filters[i]; |
- SkBitmap result; |
- SkIPoint offset; |
- REPORTER_ASSERT(reporter, filter->filterImage(&proxy, bitmap, SkMatrix::I(), &result, &offset)); |
- REPORTER_ASSERT(reporter, offset.fX == 20 && offset.fY == 30); |
- } |
+static void test_crop_rects(SkBaseDevice* device, skiatest::Reporter* reporter) { |
+ // Check that all filters offset to their absolute crop rect, |
+ // unaffected by the input crop rect. |
+ // Tests pass by not asserting. |
+ SkBitmap bitmap; |
+ bitmap.setConfig(SkBitmap::kARGB_8888_Config, 100, 100); |
+ bitmap.allocPixels(); |
+ bitmap.eraseARGB(0, 0, 0, 0); |
+ SkDeviceImageFilterProxy proxy(device); |
+ |
+ SkImageFilter::CropRect inputCropRect(SkRect::MakeXYWH(8, 13, 80, 80)); |
+ SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(20, 30, 60, 60)); |
+ SkAutoTUnref<SkImageFilter> input(make_grayscale(NULL, &inputCropRect)); |
+ |
+ SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateModeFilter(SK_ColorRED, SkXfermode::kSrcIn_Mode)); |
+ SkPoint3 location(0, 0, SK_Scalar1); |
+ SkPoint3 target(SK_Scalar1, SK_Scalar1, SK_Scalar1); |
+ SkScalar kernel[9] = { |
+ SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), |
+ SkIntToScalar( 1), SkIntToScalar(-7), SkIntToScalar( 1), |
+ SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), |
+ }; |
+ SkISize kernelSize = SkISize::Make(3, 3); |
+ SkScalar gain = SK_Scalar1, bias = 0; |
+ |
+ SkImageFilter* filters[] = { |
+ SkColorFilterImageFilter::Create(cf.get(), input.get(), &cropRect), |
+ new SkDisplacementMapEffect(SkDisplacementMapEffect::kR_ChannelSelectorType, |
+ SkDisplacementMapEffect::kB_ChannelSelectorType, |
+ 40.0f, input.get(), input.get(), &cropRect), |
+ new SkBlurImageFilter(SK_Scalar1, SK_Scalar1, input.get(), &cropRect), |
+ new SkDropShadowImageFilter(SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN, input.get(), &cropRect), |
+ SkLightingImageFilter::CreatePointLitDiffuse(location, SK_ColorGREEN, 0, 0, input.get(), &cropRect), |
+ SkLightingImageFilter::CreatePointLitSpecular(location, SK_ColorGREEN, 0, 0, 0, input.get(), &cropRect), |
+ new SkMatrixConvolutionImageFilter(kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1), SkMatrixConvolutionImageFilter::kRepeat_TileMode, false, input.get(), &cropRect), |
+ new SkMergeImageFilter(input.get(), input.get(), SkXfermode::kSrcOver_Mode, &cropRect), |
+ new SkOffsetImageFilter(SK_Scalar1, SK_Scalar1, input.get(), &cropRect), |
+ new SkOffsetImageFilter(SK_Scalar1, SK_Scalar1, input.get(), &cropRect), |
+ new SkDilateImageFilter(3, 2, input.get(), &cropRect), |
+ new SkErodeImageFilter(2, 3, input.get(), &cropRect), |
+ new SkTileImageFilter(inputCropRect.rect(), cropRect.rect(), input.get()), |
+ new SkXfermodeImageFilter(SkXfermode::Create(SkXfermode::kSrcOver_Mode), input.get(), input.get(), &cropRect), |
+ }; |
+ |
+ for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { |
+ SkImageFilter* filter = filters[i]; |
+ SkBitmap result; |
+ SkIPoint offset; |
+ SkString str; |
+ str.printf("filter %ld", i); |
+ REPORTER_ASSERT_MESSAGE(reporter, filter->filterImage(&proxy, bitmap, SkMatrix::I(), &result, &offset), str.c_str()); |
+ REPORTER_ASSERT_MESSAGE(reporter, offset.fX == 20 && offset.fY == 30, str.c_str()); |
+ } |
- for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { |
- SkSafeUnref(filters[i]); |
- } |
+ for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { |
+ SkSafeUnref(filters[i]); |
} |
} |
+ |
+DEF_TEST(ImageFilterCropRect, reporter) { |
+ SkBitmap temp; |
+ temp.setConfig(SkBitmap::kARGB_8888_Config, 100, 100); |
+ temp.allocPixels(); |
+ SkBitmapDevice device(temp); |
+ test_crop_rects(&device, reporter); |
+} |
+ |
+DEF_GPUTEST(ImageFilterCropRectGPU, reporter, factory) { |
+ GrContext* context = factory->get(static_cast<GrContextFactory::GLContextType>(0)); |
+ SkGpuDevice device(context, SkBitmap::kARGB_8888_Config, 100, 100); |
+ test_crop_rects(&device, reporter); |
+} |