| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkBitmap.h" | 8 #include "SkBitmap.h" |
| 9 #include "SkBitmapDevice.h" | 9 #include "SkBitmapDevice.h" |
| 10 #include "SkBlurImageFilter.h" | 10 #include "SkBlurImageFilter.h" |
| (...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 { | 254 { |
| 255 SkPaint paint; | 255 SkPaint paint; |
| 256 paint.setShader(SkPerlinNoiseShader::MakeTurbulence(SK_Scalar1, SK_S
calar1, 1, 0)); | 256 paint.setShader(SkPerlinNoiseShader::MakeTurbulence(SK_Scalar1, SK_S
calar1, 1, 0)); |
| 257 sk_sp<SkImageFilter> paintFilter(SkPaintImageFilter::Make(paint)); | 257 sk_sp<SkImageFilter> paintFilter(SkPaintImageFilter::Make(paint)); |
| 258 | 258 |
| 259 this->addFilter("paint and blur", SkBlurImageFilter::Make(five, five
, | 259 this->addFilter("paint and blur", SkBlurImageFilter::Make(five, five
, |
| 260 std::move(
paintFilter), | 260 std::move(
paintFilter), |
| 261 cropRect).
release()); | 261 cropRect).
release()); |
| 262 } | 262 } |
| 263 this->addFilter("xfermode", SkXfermodeImageFilter::Make( | 263 this->addFilter("xfermode", SkXfermodeImageFilter::Make( |
| 264 SkXfermode::Make(SkXfermode::kSrc_Mode), input.get(), input.get(), | 264 SkXfermode::Make(SkXfermode::kSrc_Mode), input, input, cropRect).rel
ease()); |
| 265 cropRect).release()); | |
| 266 } | 265 } |
| 267 int count() const { return fFilters.count(); } | 266 int count() const { return fFilters.count(); } |
| 268 SkImageFilter* getFilter(int index) const { return fFilters[index].fFilter.g
et(); } | 267 SkImageFilter* getFilter(int index) const { return fFilters[index].fFilter.g
et(); } |
| 269 const char* getName(int index) const { return fFilters[index].fName; } | 268 const char* getName(int index) const { return fFilters[index].fName; } |
| 270 private: | 269 private: |
| 271 struct Filter { | 270 struct Filter { |
| 272 Filter() : fName(nullptr), fFilter(nullptr) {} | 271 Filter() : fName(nullptr), fFilter(nullptr) {} |
| 273 Filter(const char* name, SkImageFilter* filter) : fName(name), fFilter(f
ilter) {} | 272 Filter(const char* name, SkImageFilter* filter) : fName(name), fFilter(f
ilter) {} |
| 274 const char* fName; | 273 const char* fName; |
| 275 sk_sp<SkImageFilter> fFilter; | 274 sk_sp<SkImageFilter> fFilter; |
| (...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 904 SkRect boundsDst = composedFilter->computeFastBounds(boundsSrc); | 903 SkRect boundsDst = composedFilter->computeFastBounds(boundsSrc); |
| 905 | 904 |
| 906 REPORTER_ASSERT(reporter, boundsDst == expectedBounds); | 905 REPORTER_ASSERT(reporter, boundsDst == expectedBounds); |
| 907 } | 906 } |
| 908 | 907 |
| 909 DEF_TEST(ImageFilterUnionBounds, reporter) { | 908 DEF_TEST(ImageFilterUnionBounds, reporter) { |
| 910 sk_sp<SkImageFilter> offset(SkOffsetImageFilter::Make(50, 0, nullptr)); | 909 sk_sp<SkImageFilter> offset(SkOffsetImageFilter::Make(50, 0, nullptr)); |
| 911 // Regardless of which order they appear in, the image filter bounds should | 910 // Regardless of which order they appear in, the image filter bounds should |
| 912 // be combined correctly. | 911 // be combined correctly. |
| 913 { | 912 { |
| 914 sk_sp<SkImageFilter> composite(SkXfermodeImageFilter::Make(nullptr, offs
et.get())); | 913 sk_sp<SkImageFilter> composite(SkXfermodeImageFilter::Make(nullptr, offs
et)); |
| 915 SkRect bounds = SkRect::MakeWH(100, 100); | 914 SkRect bounds = SkRect::MakeWH(100, 100); |
| 916 // Intentionally aliasing here, as that's what the real callers do. | 915 // Intentionally aliasing here, as that's what the real callers do. |
| 917 bounds = composite->computeFastBounds(bounds); | 916 bounds = composite->computeFastBounds(bounds); |
| 918 REPORTER_ASSERT(reporter, bounds == SkRect::MakeWH(150, 100)); | 917 REPORTER_ASSERT(reporter, bounds == SkRect::MakeWH(150, 100)); |
| 919 } | 918 } |
| 920 { | 919 { |
| 921 sk_sp<SkImageFilter> composite(SkXfermodeImageFilter::Make(nullptr, null
ptr, | 920 sk_sp<SkImageFilter> composite(SkXfermodeImageFilter::Make(nullptr, null
ptr, |
| 922 offset.get(),
nullptr)); | 921 offset, nullp
tr)); |
| 923 SkRect bounds = SkRect::MakeWH(100, 100); | 922 SkRect bounds = SkRect::MakeWH(100, 100); |
| 924 // Intentionally aliasing here, as that's what the real callers do. | 923 // Intentionally aliasing here, as that's what the real callers do. |
| 925 bounds = composite->computeFastBounds(bounds); | 924 bounds = composite->computeFastBounds(bounds); |
| 926 REPORTER_ASSERT(reporter, bounds == SkRect::MakeWH(150, 100)); | 925 REPORTER_ASSERT(reporter, bounds == SkRect::MakeWH(150, 100)); |
| 927 } | 926 } |
| 928 } | 927 } |
| 929 | 928 |
| 930 static void test_imagefilter_merge_result_size(SkImageFilter::Proxy* proxy, | 929 static void test_imagefilter_merge_result_size(SkImageFilter::Proxy* proxy, |
| 931 skiatest::Reporter* reporter, | 930 skiatest::Reporter* reporter, |
| 932 GrContext* context) { | 931 GrContext* context) { |
| (...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1350 bitmap.eraseARGB(255, 255, 255, 255); | 1349 bitmap.eraseARGB(255, 255, 255, 255); |
| 1351 | 1350 |
| 1352 sk_sp<SkColorFilter> green(SkColorFilter::MakeModeFilter(SK_ColorGREEN, | 1351 sk_sp<SkColorFilter> green(SkColorFilter::MakeModeFilter(SK_ColorGREEN, |
| 1353 SkXfermode::kSrcIn_
Mode)); | 1352 SkXfermode::kSrcIn_
Mode)); |
| 1354 sk_sp<SkImageFilter> greenFilter(SkColorFilterImageFilter::Make(green, nullp
tr)); | 1353 sk_sp<SkImageFilter> greenFilter(SkColorFilterImageFilter::Make(green, nullp
tr)); |
| 1355 SkImageFilter::CropRect cropRect(SkRect::MakeEmpty()); | 1354 SkImageFilter::CropRect cropRect(SkRect::MakeEmpty()); |
| 1356 sk_sp<SkImageFilter> croppedOut(SkColorFilterImageFilter::Make(green, nullpt
r, &cropRect)); | 1355 sk_sp<SkImageFilter> croppedOut(SkColorFilterImageFilter::Make(green, nullpt
r, &cropRect)); |
| 1357 | 1356 |
| 1358 // Check that an xfermode image filter whose input has been cropped out stil
l draws the other | 1357 // Check that an xfermode image filter whose input has been cropped out stil
l draws the other |
| 1359 // input. Also check that drawing with both inputs cropped out doesn't cause
a GPU warning. | 1358 // input. Also check that drawing with both inputs cropped out doesn't cause
a GPU warning. |
| 1360 auto mode = SkXfermode::Make(SkXfermode::kSrcOver_Mode); | 1359 sk_sp<SkXfermode> mode(SkXfermode::Make(SkXfermode::kSrcOver_Mode)); |
| 1361 auto xfermodeNoFg(SkXfermodeImageFilter::Make(mode, | 1360 sk_sp<SkImageFilter> xfermodeNoFg(SkXfermodeImageFilter::Make(mode, greenFil
ter, |
| 1362 greenFilter.get(), croppedOut.
get(), nullptr)); | 1361 croppedOut, nu
llptr)); |
| 1363 auto xfermodeNoBg(SkXfermodeImageFilter::Make(mode, | 1362 sk_sp<SkImageFilter> xfermodeNoBg(SkXfermodeImageFilter::Make(mode, croppedO
ut, |
| 1364 croppedOut.get(), greenFilter.
get(), nullptr)); | 1363 greenFilter, n
ullptr)); |
| 1365 auto xfermodeNoFgNoBg(SkXfermodeImageFilter::Make(mode, | 1364 sk_sp<SkImageFilter> xfermodeNoFgNoBg(SkXfermodeImageFilter::Make(mode, crop
pedOut, |
| 1366 croppedOut.get(), | 1365 croppedOut
, nullptr)); |
| 1367 croppedOut.get(), nullptr)
); | |
| 1368 | 1366 |
| 1369 SkPaint paint; | 1367 SkPaint paint; |
| 1370 paint.setImageFilter(xfermodeNoFg); | 1368 paint.setImageFilter(std::move(xfermodeNoFg)); |
| 1371 canvas->drawBitmap(bitmap, 0, 0, &paint); // drawSprite | 1369 canvas->drawBitmap(bitmap, 0, 0, &paint); // drawSprite |
| 1372 | 1370 |
| 1373 uint32_t pixel; | 1371 uint32_t pixel; |
| 1374 SkImageInfo info = SkImageInfo::Make(1, 1, kBGRA_8888_SkColorType, kUnpremul
_SkAlphaType); | 1372 SkImageInfo info = SkImageInfo::Make(1, 1, kBGRA_8888_SkColorType, kUnpremul
_SkAlphaType); |
| 1375 canvas->readPixels(info, &pixel, 4, 0, 0); | 1373 canvas->readPixels(info, &pixel, 4, 0, 0); |
| 1376 REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); | 1374 REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); |
| 1377 | 1375 |
| 1378 paint.setImageFilter(xfermodeNoBg); | 1376 paint.setImageFilter(std::move(xfermodeNoBg)); |
| 1379 canvas->drawBitmap(bitmap, 0, 0, &paint); // drawSprite | 1377 canvas->drawBitmap(bitmap, 0, 0, &paint); // drawSprite |
| 1380 canvas->readPixels(info, &pixel, 4, 0, 0); | 1378 canvas->readPixels(info, &pixel, 4, 0, 0); |
| 1381 REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); | 1379 REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); |
| 1382 | 1380 |
| 1383 paint.setImageFilter(xfermodeNoFgNoBg); | 1381 paint.setImageFilter(std::move(xfermodeNoFgNoBg)); |
| 1384 canvas->drawBitmap(bitmap, 0, 0, &paint); // drawSprite | 1382 canvas->drawBitmap(bitmap, 0, 0, &paint); // drawSprite |
| 1385 canvas->readPixels(info, &pixel, 4, 0, 0); | 1383 canvas->readPixels(info, &pixel, 4, 0, 0); |
| 1386 REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); | 1384 REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); |
| 1387 } | 1385 } |
| 1388 | 1386 |
| 1389 DEF_TEST(ImageFilterNestedSaveLayer, reporter) { | 1387 DEF_TEST(ImageFilterNestedSaveLayer, reporter) { |
| 1390 SkBitmap temp; | 1388 SkBitmap temp; |
| 1391 temp.allocN32Pixels(50, 50); | 1389 temp.allocN32Pixels(50, 50); |
| 1392 SkCanvas canvas(temp); | 1390 SkCanvas canvas(temp); |
| 1393 canvas.clear(0x0); | 1391 canvas.clear(0x0); |
| (...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1706 | 1704 |
| 1707 test_xfermode_cropped_input(&canvas, reporter); | 1705 test_xfermode_cropped_input(&canvas, reporter); |
| 1708 } | 1706 } |
| 1709 | 1707 |
| 1710 DEF_GPUTEST_FOR_ALL_CONTEXTS(BlurLargeImage_Gpu, reporter, context) { | 1708 DEF_GPUTEST_FOR_ALL_CONTEXTS(BlurLargeImage_Gpu, reporter, context) { |
| 1711 auto surface(SkSurface::MakeRenderTarget(context, SkBudgeted::kYes, | 1709 auto surface(SkSurface::MakeRenderTarget(context, SkBudgeted::kYes, |
| 1712 SkImageInfo::MakeN32Premul(100, 100
))); | 1710 SkImageInfo::MakeN32Premul(100, 100
))); |
| 1713 test_large_blur_input(reporter, surface->getCanvas()); | 1711 test_large_blur_input(reporter, surface->getCanvas()); |
| 1714 } | 1712 } |
| 1715 #endif | 1713 #endif |
| OLD | NEW |