| 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 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 this->addFilter("drop shadow", SkDropShadowImageFilter::Make( | 184 this->addFilter("drop shadow", SkDropShadowImageFilter::Make( |
| 185 SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN, | 185 SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN, |
| 186 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, | 186 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, |
| 187 input, cropRect).release()); | 187 input, cropRect).release()); |
| 188 this->addFilter("diffuse lighting", SkLightingImageFilter::CreatePointLi
tDiffuse( | 188 this->addFilter("diffuse lighting", SkLightingImageFilter::CreatePointLi
tDiffuse( |
| 189 location, SK_ColorGREEN, 0, 0, input.get(), cropRect)); | 189 location, SK_ColorGREEN, 0, 0, input.get(), cropRect)); |
| 190 this->addFilter("specular lighting", | 190 this->addFilter("specular lighting", |
| 191 SkLightingImageFilter::CreatePointLitSpecular(location, SK_Col
orGREEN, 0, 0, 0, | 191 SkLightingImageFilter::CreatePointLitSpecular(location, SK_Col
orGREEN, 0, 0, 0, |
| 192 input.get(), cro
pRect)); | 192 input.get(), cro
pRect)); |
| 193 this->addFilter("matrix convolution", | 193 this->addFilter("matrix convolution", |
| 194 SkMatrixConvolutionImageFilter::Create( | 194 SkMatrixConvolutionImageFilter::Make( |
| 195 kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1), | 195 kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1), |
| 196 SkMatrixConvolutionImageFilter::kRepeat_TileMode, false, | 196 SkMatrixConvolutionImageFilter::kRepeat_TileMode, false, |
| 197 input.get(), cropRect)); | 197 input, cropRect).release()); |
| 198 this->addFilter("merge", SkMergeImageFilter::Make(input, input, | 198 this->addFilter("merge", SkMergeImageFilter::Make(input, input, |
| 199 SkXfermode::kSrcOver_M
ode, | 199 SkXfermode::kSrcOver_M
ode, |
| 200 cropRect).release()); | 200 cropRect).release()); |
| 201 { | 201 { |
| 202 SkPaint greenColorShaderPaint; | 202 SkPaint greenColorShaderPaint; |
| 203 greenColorShaderPaint.setShader(SkShader::MakeColorShader(SK_ColorGR
EEN)); | 203 greenColorShaderPaint.setShader(SkShader::MakeColorShader(SK_ColorGR
EEN)); |
| 204 | 204 |
| 205 SkImageFilter::CropRect leftSideCropRect(SkRect::MakeXYWH(0, 0, 32,
64)); | 205 SkImageFilter::CropRect leftSideCropRect(SkRect::MakeXYWH(0, 0, 32,
64)); |
| 206 sk_sp<SkImageFilter> paintFilterLeft(SkPaintImageFilter::Make(greenC
olorShaderPaint, | 206 sk_sp<SkImageFilter> paintFilterLeft(SkPaintImageFilter::Make(greenC
olorShaderPaint, |
| 207 &leftS
ideCropRect)); | 207 &leftS
ideCropRect)); |
| (...skipping 818 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1026 | 1026 |
| 1027 DEF_TEST(ImageFilterMatrixConvolution, reporter) { | 1027 DEF_TEST(ImageFilterMatrixConvolution, reporter) { |
| 1028 // Check that a 1x3 filter does not cause a spurious assert. | 1028 // Check that a 1x3 filter does not cause a spurious assert. |
| 1029 SkScalar kernel[3] = { | 1029 SkScalar kernel[3] = { |
| 1030 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), | 1030 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), |
| 1031 }; | 1031 }; |
| 1032 SkISize kernelSize = SkISize::Make(1, 3); | 1032 SkISize kernelSize = SkISize::Make(1, 3); |
| 1033 SkScalar gain = SK_Scalar1, bias = 0; | 1033 SkScalar gain = SK_Scalar1, bias = 0; |
| 1034 SkIPoint kernelOffset = SkIPoint::Make(0, 0); | 1034 SkIPoint kernelOffset = SkIPoint::Make(0, 0); |
| 1035 | 1035 |
| 1036 SkAutoTUnref<SkImageFilter> filter( | 1036 sk_sp<SkImageFilter> filter(SkMatrixConvolutionImageFilter::Make( |
| 1037 SkMatrixConvolutionImageFilter::Create( | 1037 kernelSize, kernel, |
| 1038 kernelSize, kernel, gain, bias, kernelOffset, | 1038 gain, bias, kernelOffset, |
| 1039 SkMatrixConvolutionImageFilter::kRepeat_TileMode, false)); | 1039 SkMatrixConvolutionImageFilter::kRep
eat_TileMode, |
| 1040 false, nullptr)); |
| 1040 | 1041 |
| 1041 SkBitmap result; | 1042 SkBitmap result; |
| 1042 int width = 16, height = 16; | 1043 int width = 16, height = 16; |
| 1043 result.allocN32Pixels(width, height); | 1044 result.allocN32Pixels(width, height); |
| 1044 SkCanvas canvas(result); | 1045 SkCanvas canvas(result); |
| 1045 canvas.clear(0); | 1046 canvas.clear(0); |
| 1046 | 1047 |
| 1047 SkPaint paint; | 1048 SkPaint paint; |
| 1048 paint.setImageFilter(filter); | 1049 paint.setImageFilter(std::move(filter)); |
| 1049 SkRect rect = SkRect::Make(SkIRect::MakeWH(width, height)); | 1050 SkRect rect = SkRect::Make(SkIRect::MakeWH(width, height)); |
| 1050 canvas.drawRect(rect, paint); | 1051 canvas.drawRect(rect, paint); |
| 1051 } | 1052 } |
| 1052 | 1053 |
| 1053 DEF_TEST(ImageFilterMatrixConvolutionBorder, reporter) { | 1054 DEF_TEST(ImageFilterMatrixConvolutionBorder, reporter) { |
| 1054 // Check that a filter with borders outside the target bounds | 1055 // Check that a filter with borders outside the target bounds |
| 1055 // does not crash. | 1056 // does not crash. |
| 1056 SkScalar kernel[3] = { | 1057 SkScalar kernel[3] = { |
| 1057 0, 0, 0, | 1058 0, 0, 0, |
| 1058 }; | 1059 }; |
| 1059 SkISize kernelSize = SkISize::Make(3, 1); | 1060 SkISize kernelSize = SkISize::Make(3, 1); |
| 1060 SkScalar gain = SK_Scalar1, bias = 0; | 1061 SkScalar gain = SK_Scalar1, bias = 0; |
| 1061 SkIPoint kernelOffset = SkIPoint::Make(2, 0); | 1062 SkIPoint kernelOffset = SkIPoint::Make(2, 0); |
| 1062 | 1063 |
| 1063 SkAutoTUnref<SkImageFilter> filter( | 1064 sk_sp<SkImageFilter> filter(SkMatrixConvolutionImageFilter::Make( |
| 1064 SkMatrixConvolutionImageFilter::Create( | 1065 kernelSize, kernel, gain, bias, kern
elOffset, |
| 1065 kernelSize, kernel, gain, bias, kernelOffset, | 1066 SkMatrixConvolutionImageFilter::kCla
mp_TileMode, |
| 1066 SkMatrixConvolutionImageFilter::kClamp_TileMode, true)); | 1067 true, nullptr)); |
| 1067 | 1068 |
| 1068 SkBitmap result; | 1069 SkBitmap result; |
| 1069 | 1070 |
| 1070 int width = 10, height = 10; | 1071 int width = 10, height = 10; |
| 1071 result.allocN32Pixels(width, height); | 1072 result.allocN32Pixels(width, height); |
| 1072 SkCanvas canvas(result); | 1073 SkCanvas canvas(result); |
| 1073 canvas.clear(0); | 1074 canvas.clear(0); |
| 1074 | 1075 |
| 1075 SkPaint filterPaint; | 1076 SkPaint filterPaint; |
| 1076 filterPaint.setImageFilter(filter); | 1077 filterPaint.setImageFilter(std::move(filter)); |
| 1077 SkRect bounds = SkRect::MakeWH(1, 10); | 1078 SkRect bounds = SkRect::MakeWH(1, 10); |
| 1078 SkRect rect = SkRect::Make(SkIRect::MakeWH(width, height)); | 1079 SkRect rect = SkRect::Make(SkIRect::MakeWH(width, height)); |
| 1079 SkPaint rectPaint; | 1080 SkPaint rectPaint; |
| 1080 canvas.saveLayer(&bounds, &filterPaint); | 1081 canvas.saveLayer(&bounds, &filterPaint); |
| 1081 canvas.drawRect(rect, rectPaint); | 1082 canvas.drawRect(rect, rectPaint); |
| 1082 canvas.restore(); | 1083 canvas.restore(); |
| 1083 } | 1084 } |
| 1084 | 1085 |
| 1085 DEF_TEST(ImageFilterCropRect, reporter) { | 1086 DEF_TEST(ImageFilterCropRect, reporter) { |
| 1086 run_raster_test(reporter, 100, test_crop_rects); | 1087 run_raster_test(reporter, 100, test_crop_rects); |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1286 SkCanvas canvas(temp); | 1287 SkCanvas canvas(temp); |
| 1287 test_huge_blur(&canvas, reporter); | 1288 test_huge_blur(&canvas, reporter); |
| 1288 } | 1289 } |
| 1289 | 1290 |
| 1290 DEF_TEST(MatrixConvolutionSanityTest, reporter) { | 1291 DEF_TEST(MatrixConvolutionSanityTest, reporter) { |
| 1291 SkScalar kernel[1] = { 0 }; | 1292 SkScalar kernel[1] = { 0 }; |
| 1292 SkScalar gain = SK_Scalar1, bias = 0; | 1293 SkScalar gain = SK_Scalar1, bias = 0; |
| 1293 SkIPoint kernelOffset = SkIPoint::Make(1, 1); | 1294 SkIPoint kernelOffset = SkIPoint::Make(1, 1); |
| 1294 | 1295 |
| 1295 // Check that an enormous (non-allocatable) kernel gives a nullptr filter. | 1296 // Check that an enormous (non-allocatable) kernel gives a nullptr filter. |
| 1296 SkAutoTUnref<SkImageFilter> conv(SkMatrixConvolutionImageFilter::Create( | 1297 sk_sp<SkImageFilter> conv(SkMatrixConvolutionImageFilter::Make( |
| 1297 SkISize::Make(1<<30, 1<<30), | 1298 SkISize::Make(1<<30, 1<<30), |
| 1298 kernel, | 1299 kernel, |
| 1299 gain, | 1300 gain, |
| 1300 bias, | 1301 bias, |
| 1301 kernelOffset, | 1302 kernelOffset, |
| 1302 SkMatrixConvolutionImageFilter::kRepeat_TileMode, | 1303 SkMatrixConvolutionImageFilter::kRepeat_TileMode, |
| 1303 false)); | 1304 false, |
| 1305 nullptr)); |
| 1304 | 1306 |
| 1305 REPORTER_ASSERT(reporter, nullptr == conv.get()); | 1307 REPORTER_ASSERT(reporter, nullptr == conv.get()); |
| 1306 | 1308 |
| 1307 // Check that a nullptr kernel gives a nullptr filter. | 1309 // Check that a nullptr kernel gives a nullptr filter. |
| 1308 conv.reset(SkMatrixConvolutionImageFilter::Create( | 1310 conv = SkMatrixConvolutionImageFilter::Make( |
| 1309 SkISize::Make(1, 1), | 1311 SkISize::Make(1, 1), |
| 1310 nullptr, | 1312 nullptr, |
| 1311 gain, | 1313 gain, |
| 1312 bias, | 1314 bias, |
| 1313 kernelOffset, | 1315 kernelOffset, |
| 1314 SkMatrixConvolutionImageFilter::kRepeat_TileMode, | 1316 SkMatrixConvolutionImageFilter::kRepeat_TileMode, |
| 1315 false)); | 1317 false, |
| 1318 nullptr); |
| 1316 | 1319 |
| 1317 REPORTER_ASSERT(reporter, nullptr == conv.get()); | 1320 REPORTER_ASSERT(reporter, nullptr == conv.get()); |
| 1318 | 1321 |
| 1319 // Check that a kernel width < 1 gives a nullptr filter. | 1322 // Check that a kernel width < 1 gives a nullptr filter. |
| 1320 conv.reset(SkMatrixConvolutionImageFilter::Create( | 1323 conv = SkMatrixConvolutionImageFilter::Make( |
| 1321 SkISize::Make(0, 1), | 1324 SkISize::Make(0, 1), |
| 1322 kernel, | 1325 kernel, |
| 1323 gain, | 1326 gain, |
| 1324 bias, | 1327 bias, |
| 1325 kernelOffset, | 1328 kernelOffset, |
| 1326 SkMatrixConvolutionImageFilter::kRepeat_TileMode, | 1329 SkMatrixConvolutionImageFilter::kRepeat_TileMode, |
| 1327 false)); | 1330 false, |
| 1331 nullptr); |
| 1328 | 1332 |
| 1329 REPORTER_ASSERT(reporter, nullptr == conv.get()); | 1333 REPORTER_ASSERT(reporter, nullptr == conv.get()); |
| 1330 | 1334 |
| 1331 // Check that kernel height < 1 gives a nullptr filter. | 1335 // Check that kernel height < 1 gives a nullptr filter. |
| 1332 conv.reset(SkMatrixConvolutionImageFilter::Create( | 1336 conv = SkMatrixConvolutionImageFilter::Make( |
| 1333 SkISize::Make(1, -1), | 1337 SkISize::Make(1, -1), |
| 1334 kernel, | 1338 kernel, |
| 1335 gain, | 1339 gain, |
| 1336 bias, | 1340 bias, |
| 1337 kernelOffset, | 1341 kernelOffset, |
| 1338 SkMatrixConvolutionImageFilter::kRepeat_TileMode, | 1342 SkMatrixConvolutionImageFilter::kRepeat_TileMode, |
| 1339 false)); | 1343 false, |
| 1344 nullptr); |
| 1340 | 1345 |
| 1341 REPORTER_ASSERT(reporter, nullptr == conv.get()); | 1346 REPORTER_ASSERT(reporter, nullptr == conv.get()); |
| 1342 } | 1347 } |
| 1343 | 1348 |
| 1344 static void test_xfermode_cropped_input(SkCanvas* canvas, skiatest::Reporter* re
porter) { | 1349 static void test_xfermode_cropped_input(SkCanvas* canvas, skiatest::Reporter* re
porter) { |
| 1345 canvas->clear(0); | 1350 canvas->clear(0); |
| 1346 | 1351 |
| 1347 SkBitmap bitmap; | 1352 SkBitmap bitmap; |
| 1348 bitmap.allocN32Pixels(1, 1); | 1353 bitmap.allocN32Pixels(1, 1); |
| 1349 bitmap.eraseARGB(255, 255, 255, 255); | 1354 bitmap.eraseARGB(255, 255, 255, 255); |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1704 | 1709 |
| 1705 test_xfermode_cropped_input(&canvas, reporter); | 1710 test_xfermode_cropped_input(&canvas, reporter); |
| 1706 } | 1711 } |
| 1707 | 1712 |
| 1708 DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(BlurLargeImage_Gpu, reporter, ctxInfo) { | 1713 DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(BlurLargeImage_Gpu, reporter, ctxInfo) { |
| 1709 auto surface(SkSurface::MakeRenderTarget(ctxInfo.fGrContext, SkBudgeted::kYe
s, | 1714 auto surface(SkSurface::MakeRenderTarget(ctxInfo.fGrContext, SkBudgeted::kYe
s, |
| 1710 SkImageInfo::MakeN32Premul(100, 100
))); | 1715 SkImageInfo::MakeN32Premul(100, 100
))); |
| 1711 test_large_blur_input(reporter, surface->getCanvas()); | 1716 test_large_blur_input(reporter, surface->getCanvas()); |
| 1712 } | 1717 } |
| 1713 #endif | 1718 #endif |
| OLD | NEW |