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 |