| 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 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 bitmap.allocN32Pixels(width, height); | 138 bitmap.allocN32Pixels(width, height); |
| 139 SkCanvas canvas(bitmap); | 139 SkCanvas canvas(bitmap); |
| 140 draw_gradient_circle(&canvas, width, height); | 140 draw_gradient_circle(&canvas, width, height); |
| 141 return bitmap; | 141 return bitmap; |
| 142 } | 142 } |
| 143 | 143 |
| 144 class FilterList { | 144 class FilterList { |
| 145 public: | 145 public: |
| 146 FilterList(sk_sp<SkImageFilter> input, const SkImageFilter::CropRect* cropRe
ct = nullptr) { | 146 FilterList(sk_sp<SkImageFilter> input, const SkImageFilter::CropRect* cropRe
ct = nullptr) { |
| 147 SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1); | 147 SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1); |
| 148 SkScalar kernel[9] = { | |
| 149 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), | |
| 150 SkIntToScalar( 1), SkIntToScalar(-7), SkIntToScalar( 1), | |
| 151 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), | |
| 152 }; | |
| 153 const SkISize kernelSize = SkISize::Make(3, 3); | |
| 154 const SkScalar gain = SK_Scalar1, bias = 0; | |
| 155 const SkScalar five = SkIntToScalar(5); | 148 const SkScalar five = SkIntToScalar(5); |
| 156 | 149 |
| 157 SkMatrix matrix; | |
| 158 | |
| 159 matrix.setTranslate(SK_Scalar1, SK_Scalar1); | |
| 160 matrix.postRotate(SkIntToScalar(45), SK_Scalar1, SK_Scalar1); | |
| 161 | |
| 162 { | 150 { |
| 163 sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(SK_ColorRED, | 151 sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(SK_ColorRED, |
| 164 SkXfermode::kS
rcIn_Mode)); | 152 SkXfermode::kS
rcIn_Mode)); |
| 165 | 153 |
| 166 this->addFilter("color filter", | 154 this->addFilter("color filter", |
| 167 SkColorFilterImageFilter::Make(cf, input, cropRect).release()); | 155 SkColorFilterImageFilter::Make(std::move(cf), input, cropRect)); |
| 168 } | 156 } |
| 169 | 157 |
| 170 { | 158 { |
| 171 sk_sp<SkImage> gradientImage(SkImage::MakeFromBitmap(make_gradient_c
ircle(64, 64))); | 159 sk_sp<SkImage> gradientImage(SkImage::MakeFromBitmap(make_gradient_c
ircle(64, 64))); |
| 172 sk_sp<SkImageFilter> gradientSource(SkImageSource::Make(std::move(gr
adientImage))); | 160 sk_sp<SkImageFilter> gradientSource(SkImageSource::Make(std::move(gr
adientImage))); |
| 173 | 161 |
| 174 this->addFilter("displacement map", SkDisplacementMapEffect::Create( | 162 this->addFilter("displacement map", |
| 175 SkDisplacementMapEffect::kR_ChannelSelectorType, | 163 sk_sp<SkImageFilter>(SkDisplacementMapEffect::Create( |
| 176 SkDisplacementMapEffect::kB_ChannelSelectorType, | 164 SkDisplacementMapEffect::kR_ChannelSelec
torType, |
| 177 20.0f, gradientSource.get(), input.get(), cropRect)); | 165 SkDisplacementMapEffect::kB_ChannelSelec
torType, |
| 166 20.0f, gradientSource.get(), input.get()
, cropRect))); |
| 178 } | 167 } |
| 179 | 168 |
| 180 this->addFilter("blur", SkBlurImageFilter::Make(SK_Scalar1, | 169 this->addFilter("blur", SkBlurImageFilter::Make(SK_Scalar1, |
| 181 SK_Scalar1, | 170 SK_Scalar1, |
| 182 input, | 171 input, |
| 183 cropRect).release()); | 172 cropRect)); |
| 184 this->addFilter("drop shadow", SkDropShadowImageFilter::Make( | 173 this->addFilter("drop shadow", SkDropShadowImageFilter::Make( |
| 185 SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN, | 174 SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN, |
| 186 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, | 175 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, |
| 187 input, cropRect).release()); | 176 input, cropRect)); |
| 188 this->addFilter("diffuse lighting", SkLightingImageFilter::CreatePointLi
tDiffuse( | 177 this->addFilter("diffuse lighting", |
| 189 location, SK_ColorGREEN, 0, 0, input.get(), cropRect)); | 178 SkLightingImageFilter::MakePointLitDiffuse(location, SK_ColorG
REEN, 0, 0, |
| 179 input, cropRect)); |
| 190 this->addFilter("specular lighting", | 180 this->addFilter("specular lighting", |
| 191 SkLightingImageFilter::CreatePointLitSpecular(location, SK_Col
orGREEN, 0, 0, 0, | 181 SkLightingImageFilter::MakePointLitSpecular(location, SK_Color
GREEN, 0, 0, 0, |
| 192 input.get(), cro
pRect)); | 182 input, cropRect)); |
| 193 this->addFilter("matrix convolution", | 183 { |
| 194 SkMatrixConvolutionImageFilter::Create( | 184 SkScalar kernel[9] = { |
| 195 kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1), | 185 SkIntToScalar(1), SkIntToScalar(1), SkIntToScalar(1), |
| 196 SkMatrixConvolutionImageFilter::kRepeat_TileMode, false, | 186 SkIntToScalar(1), SkIntToScalar(-7), SkIntToScalar(1), |
| 197 input.get(), cropRect)); | 187 SkIntToScalar(1), SkIntToScalar(1), SkIntToScalar(1), |
| 188 }; |
| 189 const SkISize kernelSize = SkISize::Make(3, 3); |
| 190 const SkScalar gain = SK_Scalar1, bias = 0; |
| 191 |
| 192 this->addFilter("matrix convolution", |
| 193 sk_sp<SkImageFilter>(SkMatrixConvolutionImageFilter::Creat
e( |
| 194 kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1), |
| 195 SkMatrixConvolutionImageFilter::kRepeat_TileMode, fals
e, |
| 196 input.get(), cropRect))); |
| 197 } |
| 198 |
| 198 this->addFilter("merge", SkMergeImageFilter::Make(input, input, | 199 this->addFilter("merge", SkMergeImageFilter::Make(input, input, |
| 199 SkXfermode::kSrcOver_M
ode, | 200 SkXfermode::kSrcOver_M
ode, |
| 200 cropRect).release()); | 201 cropRect)); |
| 202 |
| 201 { | 203 { |
| 202 SkPaint greenColorShaderPaint; | 204 SkPaint greenColorShaderPaint; |
| 203 greenColorShaderPaint.setShader(SkShader::MakeColorShader(SK_ColorGR
EEN)); | 205 greenColorShaderPaint.setShader(SkShader::MakeColorShader(SK_ColorGR
EEN)); |
| 204 | 206 |
| 205 SkImageFilter::CropRect leftSideCropRect(SkRect::MakeXYWH(0, 0, 32,
64)); | 207 SkImageFilter::CropRect leftSideCropRect(SkRect::MakeXYWH(0, 0, 32,
64)); |
| 206 sk_sp<SkImageFilter> paintFilterLeft(SkPaintImageFilter::Make(greenC
olorShaderPaint, | 208 sk_sp<SkImageFilter> paintFilterLeft(SkPaintImageFilter::Make(greenC
olorShaderPaint, |
| 207 &leftS
ideCropRect)); | 209 &leftS
ideCropRect)); |
| 208 SkImageFilter::CropRect rightSideCropRect(SkRect::MakeXYWH(32, 0, 32
, 64)); | 210 SkImageFilter::CropRect rightSideCropRect(SkRect::MakeXYWH(32, 0, 32
, 64)); |
| 209 sk_sp<SkImageFilter> paintFilterRight(SkPaintImageFilter::Make(green
ColorShaderPaint, | 211 sk_sp<SkImageFilter> paintFilterRight(SkPaintImageFilter::Make(green
ColorShaderPaint, |
| 210 &righ
tSideCropRect)); | 212 &righ
tSideCropRect)); |
| 211 | 213 |
| 212 | 214 |
| 213 this->addFilter("merge with disjoint inputs", SkMergeImageFilter::Ma
ke( | 215 this->addFilter("merge with disjoint inputs", SkMergeImageFilter::Ma
ke( |
| 214 std::move(paintFilterLeft), std::move(paintFilterRight), | 216 std::move(paintFilterLeft), std::move(paintFilterRight), |
| 215 SkXfermode::kSrcOver_Mode, cropRect).release()); | 217 SkXfermode::kSrcOver_Mode, cropRect)); |
| 216 } | 218 } |
| 217 | 219 |
| 218 this->addFilter("offset", | 220 this->addFilter("offset", |
| 219 SkOffsetImageFilter::Make(SK_Scalar1, SK_Scalar1, input, | 221 SkOffsetImageFilter::Make(SK_Scalar1, SK_Scalar1, input, |
| 220 cropRect).release()); | 222 cropRect)); |
| 221 this->addFilter("dilate", SkDilateImageFilter::Make(3, 2, input, cropRec
t).release()); | 223 this->addFilter("dilate", SkDilateImageFilter::Make(3, 2, input, cropRec
t)); |
| 222 this->addFilter("erode", SkErodeImageFilter::Make(2, 3, input, cropRect)
.release()); | 224 this->addFilter("erode", SkErodeImageFilter::Make(2, 3, input, cropRect)
); |
| 223 this->addFilter("tile", SkTileImageFilter::Create( | 225 this->addFilter("tile", sk_sp<SkImageFilter>(SkTileImageFilter::Create( |
| 224 SkRect::MakeXYWH(0, 0, 50, 50), | 226 SkRect::MakeXYWH(0, 0, 50, 50), |
| 225 cropRect ? cropRect->rect() : SkRect::MakeXYWH(0, 0, 100, 100), | 227 cropRect ? cropRect->rect() : SkRect::MakeXYWH(0, 0, 100, 100), |
| 226 input.get())); | 228 input.get()))); |
| 229 |
| 227 if (!cropRect) { | 230 if (!cropRect) { |
| 231 SkMatrix matrix; |
| 232 |
| 233 matrix.setTranslate(SK_Scalar1, SK_Scalar1); |
| 234 matrix.postRotate(SkIntToScalar(45), SK_Scalar1, SK_Scalar1); |
| 235 |
| 228 this->addFilter("matrix", | 236 this->addFilter("matrix", |
| 229 SkImageFilter::MakeMatrixFilter(matrix, kLow_SkFilterQuality, in
put).release()); | 237 SkImageFilter::MakeMatrixFilter(matrix, kLow_SkFilterQuality, in
put)); |
| 230 } | 238 } |
| 231 | |
| 232 { | 239 { |
| 233 sk_sp<SkImageFilter> blur(SkBlurImageFilter::Make(five, five, input)
); | 240 sk_sp<SkImageFilter> blur(SkBlurImageFilter::Make(five, five, input)
); |
| 234 | 241 |
| 235 this->addFilter("blur and offset", SkOffsetImageFilter::Make(five, f
ive, | 242 this->addFilter("blur and offset", SkOffsetImageFilter::Make(five, f
ive, |
| 236 std::mo
ve(blur), | 243 std::mo
ve(blur), |
| 237 cropRec
t).release()); | 244 cropRec
t)); |
| 238 } | 245 } |
| 239 { | 246 { |
| 240 SkRTreeFactory factory; | 247 SkRTreeFactory factory; |
| 241 SkPictureRecorder recorder; | 248 SkPictureRecorder recorder; |
| 242 SkCanvas* recordingCanvas = recorder.beginRecording(64, 64, &factory
, 0); | 249 SkCanvas* recordingCanvas = recorder.beginRecording(64, 64, &factory
, 0); |
| 243 | 250 |
| 244 SkPaint greenPaint; | 251 SkPaint greenPaint; |
| 245 greenPaint.setColor(SK_ColorGREEN); | 252 greenPaint.setColor(SK_ColorGREEN); |
| 246 recordingCanvas->drawRect(SkRect::Make(SkIRect::MakeXYWH(10, 10, 30,
20)), greenPaint); | 253 recordingCanvas->drawRect(SkRect::Make(SkIRect::MakeXYWH(10, 10, 30,
20)), greenPaint); |
| 247 sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture()); | 254 sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture()); |
| 248 sk_sp<SkImageFilter> pictureFilter(SkPictureImageFilter::Make(std::m
ove(picture))); | 255 sk_sp<SkImageFilter> pictureFilter(SkPictureImageFilter::Make(std::m
ove(picture))); |
| 249 | 256 |
| 250 this->addFilter("picture and blur", SkBlurImageFilter::Make(five, fi
ve, | 257 this->addFilter("picture and blur", SkBlurImageFilter::Make(five, fi
ve, |
| 251 std::mov
e(pictureFilter), | 258 std::mov
e(pictureFilter), |
| 252 cropRect
).release()); | 259 cropRect
)); |
| 253 } | 260 } |
| 254 { | 261 { |
| 255 SkPaint paint; | 262 SkPaint paint; |
| 256 paint.setShader(SkPerlinNoiseShader::MakeTurbulence(SK_Scalar1, SK_S
calar1, 1, 0)); | 263 paint.setShader(SkPerlinNoiseShader::MakeTurbulence(SK_Scalar1, SK_S
calar1, 1, 0)); |
| 257 sk_sp<SkImageFilter> paintFilter(SkPaintImageFilter::Make(paint)); | 264 sk_sp<SkImageFilter> paintFilter(SkPaintImageFilter::Make(paint)); |
| 258 | 265 |
| 259 this->addFilter("paint and blur", SkBlurImageFilter::Make(five, five
, | 266 this->addFilter("paint and blur", SkBlurImageFilter::Make(five, five
, |
| 260 std::move(
paintFilter), | 267 std::move(
paintFilter), |
| 261 cropRect).
release()); | 268 cropRect))
; |
| 262 } | 269 } |
| 263 this->addFilter("xfermode", SkXfermodeImageFilter::Make( | 270 this->addFilter("xfermode", SkXfermodeImageFilter::Make( |
| 264 SkXfermode::Make(SkXfermode::kSrc_Mode), input, input, cropRect).rel
ease()); | 271 SkXfermode::Make(SkXfermode::kSrc_Mode), input, input, cropRect)); |
| 265 } | 272 } |
| 266 int count() const { return fFilters.count(); } | 273 int count() const { return fFilters.count(); } |
| 267 SkImageFilter* getFilter(int index) const { return fFilters[index].fFilter.g
et(); } | 274 SkImageFilter* getFilter(int index) const { return fFilters[index].fFilter.g
et(); } |
| 268 const char* getName(int index) const { return fFilters[index].fName; } | 275 const char* getName(int index) const { return fFilters[index].fName; } |
| 269 private: | 276 private: |
| 270 struct Filter { | 277 struct Filter { |
| 271 Filter() : fName(nullptr), fFilter(nullptr) {} | 278 Filter() : fName(nullptr) {} |
| 272 Filter(const char* name, SkImageFilter* filter) : fName(name), fFilter(f
ilter) {} | 279 Filter(const char* name, sk_sp<SkImageFilter> filter) |
| 280 : fName(name) |
| 281 , fFilter(std::move(filter)) { |
| 282 } |
| 273 const char* fName; | 283 const char* fName; |
| 274 sk_sp<SkImageFilter> fFilter; | 284 sk_sp<SkImageFilter> fFilter; |
| 275 }; | 285 }; |
| 276 void addFilter(const char* name, SkImageFilter* filter) { | 286 void addFilter(const char* name, sk_sp<SkImageFilter> filter) { |
| 277 fFilters.push_back(Filter(name, filter)); | 287 fFilters.push_back(Filter(name, std::move(filter))); |
| 278 } | 288 } |
| 279 | 289 |
| 280 SkTArray<Filter> fFilters; | 290 SkTArray<Filter> fFilters; |
| 281 }; | 291 }; |
| 282 | 292 |
| 283 } | 293 } |
| 284 | 294 |
| 285 sk_sp<SkFlattenable> MatrixTestImageFilter::CreateProc(SkReadBuffer& buffer) { | 295 sk_sp<SkFlattenable> MatrixTestImageFilter::CreateProc(SkReadBuffer& buffer) { |
| 286 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); | 296 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); |
| 287 skiatest::Reporter* reporter = (skiatest::Reporter*)buffer.readFunctionPtr()
; | 297 skiatest::Reporter* reporter = (skiatest::Reporter*)buffer.readFunctionPtr()
; |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 493 // This tests for : | 503 // This tests for : |
| 494 // 1 ) location at (0,0,1) | 504 // 1 ) location at (0,0,1) |
| 495 SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1); | 505 SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1); |
| 496 // 2 ) location and target at same value | 506 // 2 ) location and target at same value |
| 497 SkPoint3 target = SkPoint3::Make(location.fX, location.fY, location.
fZ); | 507 SkPoint3 target = SkPoint3::Make(location.fX, location.fY, location.
fZ); |
| 498 // 3 ) large negative specular exponent value | 508 // 3 ) large negative specular exponent value |
| 499 SkScalar specularExponent = -1000; | 509 SkScalar specularExponent = -1000; |
| 500 | 510 |
| 501 sk_sp<SkImageFilter> bmSrc(SkImageSource::Make(std::move(image))); | 511 sk_sp<SkImageFilter> bmSrc(SkImageSource::Make(std::move(image))); |
| 502 SkPaint paint; | 512 SkPaint paint; |
| 503 paint.setImageFilter(SkLightingImageFilter::CreateSpotLitSpecular( | 513 paint.setImageFilter(SkLightingImageFilter::MakeSpotLitSpecular( |
| 504 location, target, specularExponent, 180, | 514 location, target, specularExponent, 180, |
| 505 0xFFFFFFFF, SK_Scalar1, SK_Scalar1, SK_Scalar1, | 515 0xFFFFFFFF, SK_Scalar1, SK_Scalar1, SK_Scalar1, |
| 506 bmSrc.get()))->unref(); | 516 std::move(bmSrc))); |
| 507 SkCanvas canvas(result); | 517 SkCanvas canvas(result); |
| 508 SkRect r = SkRect::MakeWH(SkIntToScalar(kBitmapSize), | 518 SkRect r = SkRect::MakeWH(SkIntToScalar(kBitmapSize), |
| 509 SkIntToScalar(kBitmapSize)); | 519 SkIntToScalar(kBitmapSize)); |
| 510 canvas.drawRect(r, paint); | 520 canvas.drawRect(r, paint); |
| 511 } | 521 } |
| 512 } | 522 } |
| 513 } | 523 } |
| 514 | 524 |
| 515 static void test_crop_rects(SkImageFilter::Proxy* proxy, | 525 static void test_crop_rects(SkImageFilter::Proxy* proxy, |
| 516 skiatest::Reporter* reporter, | 526 skiatest::Reporter* reporter, |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 618 skiatest::Reporter* reporter, | 628 skiatest::Reporter* reporter, |
| 619 GrContext* context); | 629 GrContext* context); |
| 620 | 630 |
| 621 static void run_raster_test(skiatest::Reporter* reporter, | 631 static void run_raster_test(skiatest::Reporter* reporter, |
| 622 int widthHeight, | 632 int widthHeight, |
| 623 PFTest test) { | 633 PFTest test) { |
| 624 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); | 634 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); |
| 625 | 635 |
| 626 const SkImageInfo info = SkImageInfo::MakeN32Premul(widthHeight, widthHeight
); | 636 const SkImageInfo info = SkImageInfo::MakeN32Premul(widthHeight, widthHeight
); |
| 627 | 637 |
| 628 SkAutoTUnref<SkBaseDevice> device(SkBitmapDevice::Create(info, props)); | 638 sk_sp<SkBaseDevice> device(SkBitmapDevice::Create(info, props)); |
| 629 SkImageFilter::DeviceProxy proxy(device); | 639 SkImageFilter::DeviceProxy proxy(device.get()); |
| 630 | 640 |
| 631 (*test)(&proxy, reporter, nullptr); | 641 (*test)(&proxy, reporter, nullptr); |
| 632 } | 642 } |
| 633 | 643 |
| 634 #if SK_SUPPORT_GPU | 644 #if SK_SUPPORT_GPU |
| 635 static void run_gpu_test(skiatest::Reporter* reporter, | 645 static void run_gpu_test(skiatest::Reporter* reporter, |
| 636 GrContext* context, | 646 GrContext* context, |
| 637 int widthHeight, | 647 int widthHeight, |
| 638 PFTest test) { | 648 PFTest test) { |
| 639 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); | 649 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); |
| 640 | 650 |
| 641 SkAutoTUnref<SkGpuDevice> device(SkGpuDevice::Create(context, | 651 sk_sp<SkGpuDevice> device(SkGpuDevice::Create(context, |
| 642 SkBudgeted::kNo, | 652 SkBudgeted::kNo, |
| 643 SkImageInfo::MakeN32Pre
mul(widthHeight, | 653 SkImageInfo::MakeN32Premul(wid
thHeight, |
| 644
widthHeight), | 654 wid
thHeight), |
| 645 0, | 655 0, |
| 646 &props, | 656 &props, |
| 647 SkGpuDevice::kUninit_In
itContents)); | 657 SkGpuDevice::kUninit_InitConte
nts)); |
| 648 SkImageFilter::DeviceProxy proxy(device); | 658 SkImageFilter::DeviceProxy proxy(device.get()); |
| 649 | 659 |
| 650 (*test)(&proxy, reporter, context); | 660 (*test)(&proxy, reporter, context); |
| 651 } | 661 } |
| 652 #endif | 662 #endif |
| 653 | 663 |
| 654 DEF_TEST(TestNegativeBlurSigma, reporter) { | 664 DEF_TEST(TestNegativeBlurSigma, reporter) { |
| 655 run_raster_test(reporter, 100, test_negative_blur_sigma); | 665 run_raster_test(reporter, 100, test_negative_blur_sigma); |
| 656 } | 666 } |
| 657 | 667 |
| 658 #if SK_SUPPORT_GPU | 668 #if SK_SUPPORT_GPU |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1026 | 1036 |
| 1027 DEF_TEST(ImageFilterMatrixConvolution, reporter) { | 1037 DEF_TEST(ImageFilterMatrixConvolution, reporter) { |
| 1028 // Check that a 1x3 filter does not cause a spurious assert. | 1038 // Check that a 1x3 filter does not cause a spurious assert. |
| 1029 SkScalar kernel[3] = { | 1039 SkScalar kernel[3] = { |
| 1030 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), | 1040 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), |
| 1031 }; | 1041 }; |
| 1032 SkISize kernelSize = SkISize::Make(1, 3); | 1042 SkISize kernelSize = SkISize::Make(1, 3); |
| 1033 SkScalar gain = SK_Scalar1, bias = 0; | 1043 SkScalar gain = SK_Scalar1, bias = 0; |
| 1034 SkIPoint kernelOffset = SkIPoint::Make(0, 0); | 1044 SkIPoint kernelOffset = SkIPoint::Make(0, 0); |
| 1035 | 1045 |
| 1036 SkAutoTUnref<SkImageFilter> filter( | 1046 sk_sp<SkImageFilter> filter( |
| 1037 SkMatrixConvolutionImageFilter::Create( | 1047 SkMatrixConvolutionImageFilter::Create( |
| 1038 kernelSize, kernel, gain, bias, kernelOffset, | 1048 kernelSize, kernel, gain, bias, kernelOffset, |
| 1039 SkMatrixConvolutionImageFilter::kRepeat_TileMode, false)); | 1049 SkMatrixConvolutionImageFilter::kRepeat_TileMode, false)); |
| 1040 | 1050 |
| 1041 SkBitmap result; | 1051 SkBitmap result; |
| 1042 int width = 16, height = 16; | 1052 int width = 16, height = 16; |
| 1043 result.allocN32Pixels(width, height); | 1053 result.allocN32Pixels(width, height); |
| 1044 SkCanvas canvas(result); | 1054 SkCanvas canvas(result); |
| 1045 canvas.clear(0); | 1055 canvas.clear(0); |
| 1046 | 1056 |
| 1047 SkPaint paint; | 1057 SkPaint paint; |
| 1048 paint.setImageFilter(filter); | 1058 paint.setImageFilter(std::move(filter)); |
| 1049 SkRect rect = SkRect::Make(SkIRect::MakeWH(width, height)); | 1059 SkRect rect = SkRect::Make(SkIRect::MakeWH(width, height)); |
| 1050 canvas.drawRect(rect, paint); | 1060 canvas.drawRect(rect, paint); |
| 1051 } | 1061 } |
| 1052 | 1062 |
| 1053 DEF_TEST(ImageFilterMatrixConvolutionBorder, reporter) { | 1063 DEF_TEST(ImageFilterMatrixConvolutionBorder, reporter) { |
| 1054 // Check that a filter with borders outside the target bounds | 1064 // Check that a filter with borders outside the target bounds |
| 1055 // does not crash. | 1065 // does not crash. |
| 1056 SkScalar kernel[3] = { | 1066 SkScalar kernel[3] = { |
| 1057 0, 0, 0, | 1067 0, 0, 0, |
| 1058 }; | 1068 }; |
| 1059 SkISize kernelSize = SkISize::Make(3, 1); | 1069 SkISize kernelSize = SkISize::Make(3, 1); |
| 1060 SkScalar gain = SK_Scalar1, bias = 0; | 1070 SkScalar gain = SK_Scalar1, bias = 0; |
| 1061 SkIPoint kernelOffset = SkIPoint::Make(2, 0); | 1071 SkIPoint kernelOffset = SkIPoint::Make(2, 0); |
| 1062 | 1072 |
| 1063 SkAutoTUnref<SkImageFilter> filter( | 1073 sk_sp<SkImageFilter> filter( |
| 1064 SkMatrixConvolutionImageFilter::Create( | 1074 SkMatrixConvolutionImageFilter::Create( |
| 1065 kernelSize, kernel, gain, bias, kernelOffset, | 1075 kernelSize, kernel, gain, bias, kernelOffset, |
| 1066 SkMatrixConvolutionImageFilter::kClamp_TileMode, true)); | 1076 SkMatrixConvolutionImageFilter::kClamp_TileMode, true)); |
| 1067 | 1077 |
| 1068 SkBitmap result; | 1078 SkBitmap result; |
| 1069 | 1079 |
| 1070 int width = 10, height = 10; | 1080 int width = 10, height = 10; |
| 1071 result.allocN32Pixels(width, height); | 1081 result.allocN32Pixels(width, height); |
| 1072 SkCanvas canvas(result); | 1082 SkCanvas canvas(result); |
| 1073 canvas.clear(0); | 1083 canvas.clear(0); |
| 1074 | 1084 |
| 1075 SkPaint filterPaint; | 1085 SkPaint filterPaint; |
| 1076 filterPaint.setImageFilter(filter); | 1086 filterPaint.setImageFilter(std::move(filter)); |
| 1077 SkRect bounds = SkRect::MakeWH(1, 10); | 1087 SkRect bounds = SkRect::MakeWH(1, 10); |
| 1078 SkRect rect = SkRect::Make(SkIRect::MakeWH(width, height)); | 1088 SkRect rect = SkRect::Make(SkIRect::MakeWH(width, height)); |
| 1079 SkPaint rectPaint; | 1089 SkPaint rectPaint; |
| 1080 canvas.saveLayer(&bounds, &filterPaint); | 1090 canvas.saveLayer(&bounds, &filterPaint); |
| 1081 canvas.drawRect(rect, rectPaint); | 1091 canvas.drawRect(rect, rectPaint); |
| 1082 canvas.restore(); | 1092 canvas.restore(); |
| 1083 } | 1093 } |
| 1084 | 1094 |
| 1085 DEF_TEST(ImageFilterCropRect, reporter) { | 1095 DEF_TEST(ImageFilterCropRect, reporter) { |
| 1086 run_raster_test(reporter, 100, test_crop_rects); | 1096 run_raster_test(reporter, 100, test_crop_rects); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1150 | 1160 |
| 1151 // The result here should be green, since the filter replaces the primitive'
s red interior. | 1161 // The result here should be green, since the filter replaces the primitive'
s red interior. |
| 1152 canvas.clear(0x0); | 1162 canvas.clear(0x0); |
| 1153 canvas.drawPicture(outerPicture); | 1163 canvas.drawPicture(outerPicture); |
| 1154 uint32_t pixel = *bitmap.getAddr32(0, 0); | 1164 uint32_t pixel = *bitmap.getAddr32(0, 0); |
| 1155 REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); | 1165 REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); |
| 1156 | 1166 |
| 1157 // Check that, for now, SkPictureImageFilter does not serialize or | 1167 // Check that, for now, SkPictureImageFilter does not serialize or |
| 1158 // deserialize its contained picture when the filter is serialized | 1168 // deserialize its contained picture when the filter is serialized |
| 1159 // cross-process. Do this by "laundering" it through SkValidatingReadBuffer. | 1169 // cross-process. Do this by "laundering" it through SkValidatingReadBuffer. |
| 1160 SkAutoTUnref<SkData> data(SkValidatingSerializeFlattenable(imageFilter.get()
)); | 1170 sk_sp<SkData> data(SkValidatingSerializeFlattenable(imageFilter.get())); |
| 1161 SkAutoTUnref<SkFlattenable> flattenable(SkValidatingDeserializeFlattenable( | 1171 sk_sp<SkFlattenable> flattenable(SkValidatingDeserializeFlattenable( |
| 1162 data->data(), data->size(), SkImageFilter::GetFlattenableType())); | 1172 data->data(), data->size(), SkImageFilter::GetFlattenableType())); |
| 1163 SkImageFilter* unflattenedFilter = static_cast<SkImageFilter*>(flattenable.g
et()); | 1173 SkImageFilter* unflattenedFilter = static_cast<SkImageFilter*>(flattenable.g
et()); |
| 1164 | 1174 |
| 1165 redPaintWithFilter.setImageFilter(unflattenedFilter); | 1175 redPaintWithFilter.setImageFilter(unflattenedFilter); |
| 1166 SkPictureRecorder crossProcessRecorder; | 1176 SkPictureRecorder crossProcessRecorder; |
| 1167 SkCanvas* crossProcessCanvas = crossProcessRecorder.beginRecording(1, 1, &fa
ctory, 0); | 1177 SkCanvas* crossProcessCanvas = crossProcessRecorder.beginRecording(1, 1, &fa
ctory, 0); |
| 1168 crossProcessCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(1, 1)), redPaintWi
thFilter); | 1178 crossProcessCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(1, 1)), redPaintWi
thFilter); |
| 1169 sk_sp<SkPicture> crossProcessPicture(crossProcessRecorder.finishRecordingAsP
icture()); | 1179 sk_sp<SkPicture> crossProcessPicture(crossProcessRecorder.finishRecordingAsP
icture()); |
| 1170 | 1180 |
| 1171 canvas.clear(0x0); | 1181 canvas.clear(0x0); |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1539 } | 1549 } |
| 1540 | 1550 |
| 1541 #if SK_SUPPORT_GPU | 1551 #if SK_SUPPORT_GPU |
| 1542 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(PartialCropRect_Gpu, reporter, ctxInfo) { | 1552 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(PartialCropRect_Gpu, reporter, ctxInfo) { |
| 1543 run_gpu_test(reporter, ctxInfo.fGrContext, 100, test_partial_crop_rect); | 1553 run_gpu_test(reporter, ctxInfo.fGrContext, 100, test_partial_crop_rect); |
| 1544 } | 1554 } |
| 1545 #endif | 1555 #endif |
| 1546 | 1556 |
| 1547 DEF_TEST(ImageFilterCanComputeFastBounds, reporter) { | 1557 DEF_TEST(ImageFilterCanComputeFastBounds, reporter) { |
| 1548 | 1558 |
| 1549 SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1); | 1559 { |
| 1550 SkAutoTUnref<SkImageFilter> lighting(SkLightingImageFilter::CreatePointLitDi
ffuse( | 1560 SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1); |
| 1551 location, SK_ColorGREEN, 0, 0)); | 1561 sk_sp<SkImageFilter> lighting(SkLightingImageFilter::MakePointLitDiffuse
(location, |
| 1552 REPORTER_ASSERT(reporter, !lighting->canComputeFastBounds()); | 1562
SK_ColorGREEN, |
| 1563
0, 0, nullptr)); |
| 1564 REPORTER_ASSERT(reporter, !lighting->canComputeFastBounds()); |
| 1565 } |
| 1553 | 1566 |
| 1554 { | 1567 { |
| 1555 sk_sp<SkImageFilter> gray(make_grayscale(nullptr, nullptr)); | 1568 sk_sp<SkImageFilter> gray(make_grayscale(nullptr, nullptr)); |
| 1556 REPORTER_ASSERT(reporter, gray->canComputeFastBounds()); | 1569 REPORTER_ASSERT(reporter, gray->canComputeFastBounds()); |
| 1557 { | 1570 { |
| 1558 SkColorFilter* grayCF; | 1571 SkColorFilter* grayCF; |
| 1559 REPORTER_ASSERT(reporter, gray->asAColorFilter(&grayCF)); | 1572 REPORTER_ASSERT(reporter, gray->asAColorFilter(&grayCF)); |
| 1560 REPORTER_ASSERT(reporter, !grayCF->affectsTransparentBlack()); | 1573 REPORTER_ASSERT(reporter, !grayCF->affectsTransparentBlack()); |
| 1561 grayCF->unref(); | 1574 grayCF->unref(); |
| 1562 } | 1575 } |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1673 DEF_TEST(BlurLargeImage, reporter) { | 1686 DEF_TEST(BlurLargeImage, reporter) { |
| 1674 auto surface(SkSurface::MakeRaster(SkImageInfo::MakeN32Premul(100, 100))); | 1687 auto surface(SkSurface::MakeRaster(SkImageInfo::MakeN32Premul(100, 100))); |
| 1675 test_large_blur_input(reporter, surface->getCanvas()); | 1688 test_large_blur_input(reporter, surface->getCanvas()); |
| 1676 } | 1689 } |
| 1677 | 1690 |
| 1678 #if SK_SUPPORT_GPU | 1691 #if SK_SUPPORT_GPU |
| 1679 | 1692 |
| 1680 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(HugeBlurImageFilter_Gpu, reporter, ctxInfo
) { | 1693 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(HugeBlurImageFilter_Gpu, reporter, ctxInfo
) { |
| 1681 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); | 1694 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); |
| 1682 | 1695 |
| 1683 SkAutoTUnref<SkGpuDevice> device(SkGpuDevice::Create(ctxInfo.fGrContext, | 1696 sk_sp<SkGpuDevice> device(SkGpuDevice::Create(ctxInfo.fGrContext, |
| 1684 SkBudgeted::kNo, | 1697 SkBudgeted::kNo, |
| 1685 SkImageInfo::MakeN32Pre
mul(100, 100), | 1698 SkImageInfo::MakeN32Premul(100
, 100), |
| 1686 0, | 1699 0, |
| 1687 &props, | 1700 &props, |
| 1688 SkGpuDevice::kUninit_In
itContents)); | 1701 SkGpuDevice::kUninit_InitConte
nts)); |
| 1689 SkCanvas canvas(device); | 1702 SkCanvas canvas(device.get()); |
| 1690 | 1703 |
| 1691 test_huge_blur(&canvas, reporter); | 1704 test_huge_blur(&canvas, reporter); |
| 1692 } | 1705 } |
| 1693 | 1706 |
| 1694 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(XfermodeImageFilterCroppedInput_Gpu, repor
ter, ctxInfo) { | 1707 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(XfermodeImageFilterCroppedInput_Gpu, repor
ter, ctxInfo) { |
| 1695 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); | 1708 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); |
| 1696 | 1709 |
| 1697 SkAutoTUnref<SkGpuDevice> device(SkGpuDevice::Create(ctxInfo.fGrContext, | 1710 sk_sp<SkGpuDevice> device(SkGpuDevice::Create(ctxInfo.fGrContext, |
| 1698 SkBudgeted::kNo, | 1711 SkBudgeted::kNo, |
| 1699 SkImageInfo::MakeN32Pre
mul(1, 1), | 1712 SkImageInfo::MakeN32Premul(1,
1), |
| 1700 0, | 1713 0, |
| 1701 &props, | 1714 &props, |
| 1702 SkGpuDevice::kUninit_In
itContents)); | 1715 SkGpuDevice::kUninit_InitConte
nts)); |
| 1703 SkCanvas canvas(device); | 1716 SkCanvas canvas(device.get()); |
| 1704 | 1717 |
| 1705 test_xfermode_cropped_input(&canvas, reporter); | 1718 test_xfermode_cropped_input(&canvas, reporter); |
| 1706 } | 1719 } |
| 1707 | 1720 |
| 1708 DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(BlurLargeImage_Gpu, reporter, ctxInfo) { | 1721 DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(BlurLargeImage_Gpu, reporter, ctxInfo) { |
| 1709 auto surface(SkSurface::MakeRenderTarget(ctxInfo.fGrContext, SkBudgeted::kYe
s, | 1722 auto surface(SkSurface::MakeRenderTarget(ctxInfo.fGrContext, SkBudgeted::kYe
s, |
| 1710 SkImageInfo::MakeN32Premul(100, 100
))); | 1723 SkImageInfo::MakeN32Premul(100, 100
))); |
| 1711 test_large_blur_input(reporter, surface->getCanvas()); | 1724 test_large_blur_input(reporter, surface->getCanvas()); |
| 1712 } | 1725 } |
| 1713 #endif | 1726 #endif |
| OLD | NEW |