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 |