Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(542)

Side by Side Diff: tests/ImageFilterTest.cpp

Issue 1829913002: Make a generic list of filters for use in ImageFilterTests. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Use sk_sp instead of SkAutoTUnref Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2013 Google Inc. 3 * Copyright 2013 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkBitmapDevice.h" 10 #include "SkBitmapDevice.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 buffer.writeMatrix(fExpectedMatrix); 72 buffer.writeMatrix(fExpectedMatrix);
73 } 73 }
74 74
75 private: 75 private:
76 skiatest::Reporter* fReporter; 76 skiatest::Reporter* fReporter;
77 SkMatrix fExpectedMatrix; 77 SkMatrix fExpectedMatrix;
78 78
79 typedef SkImageFilter INHERITED; 79 typedef SkImageFilter INHERITED;
80 }; 80 };
81 81
82 void draw_gradient_circle(SkCanvas* canvas, int width, int height) {
83 SkScalar x = SkIntToScalar(width / 2);
84 SkScalar y = SkIntToScalar(height / 2);
85 SkScalar radius = SkMinScalar(x, y) * 0.8f;
86 canvas->clear(0x00000000);
87 SkColor colors[2];
88 colors[0] = SK_ColorWHITE;
89 colors[1] = SK_ColorBLACK;
90 sk_sp<SkShader> shader(
91 SkGradientShader::MakeRadial(SkPoint::Make(x, y), radius, colors, nullpt r, 2,
92 SkShader::kClamp_TileMode)
93 );
94 SkPaint paint;
95 paint.setShader(shader);
96 canvas->drawCircle(x, y, radius, paint);
97 }
98
99 SkBitmap make_gradient_circle(int width, int height) {
100 SkBitmap bitmap;
101 bitmap.allocN32Pixels(width, height);
102 SkCanvas canvas(bitmap);
103 draw_gradient_circle(&canvas, width, height);
104 return bitmap;
105 }
106
107 class FilterList {
108 public:
109 FilterList(SkImageFilter* input = nullptr, const SkImageFilter::CropRect* cr opRect = nullptr) {
110 auto cf(SkColorFilter::MakeModeFilter(SK_ColorRED, SkXfermode::kSrcIn_Mo de));
111 SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1);
112 SkScalar kernel[9] = {
113 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1),
114 SkIntToScalar( 1), SkIntToScalar(-7), SkIntToScalar( 1),
115 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1),
116 };
117 const SkISize kernelSize = SkISize::Make(3, 3);
118 const SkScalar gain = SK_Scalar1, bias = 0;
119 const SkScalar five = SkIntToScalar(5);
120
121 sk_sp<SkImage> gradientImage(SkImage::MakeFromBitmap(make_gradient_circl e(64, 64)));
122 SkAutoTUnref<SkImageFilter> gradientSource(SkImageSource::Create(gradien tImage.get()));
123 SkAutoTUnref<SkImageFilter> blur(SkBlurImageFilter::Create(five, five, i nput));
124 SkMatrix matrix;
125
126 matrix.setTranslate(SK_Scalar1, SK_Scalar1);
127 matrix.postRotate(SkIntToScalar(45), SK_Scalar1, SK_Scalar1);
128
129 SkRTreeFactory factory;
130 SkPictureRecorder recorder;
131 SkCanvas* recordingCanvas = recorder.beginRecording(64, 64, &factory, 0) ;
132
133 SkPaint greenPaint;
134 greenPaint.setColor(SK_ColorGREEN);
135 recordingCanvas->drawRect(SkRect::Make(SkIRect::MakeXYWH(10, 10, 30, 20) ), greenPaint);
136 sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture());
137 SkAutoTUnref<SkImageFilter> pictureFilter(SkPictureImageFilter::Create(p icture.get()));
138 SkAutoTUnref<SkShader> shader(SkPerlinNoiseShader::CreateTurbulence(
139 SK_Scalar1, SK_Scalar1, 1, 0));
140
141 SkPaint paint;
142 paint.setShader(shader);
143 SkAutoTUnref<SkImageFilter> paintFilter(SkPaintImageFilter::Create(paint ));
144
145 sk_sp<SkShader> greenColorShader(SkShader::MakeColorShader(SK_ColorGREEN ));
146 SkPaint greenColorShaderPaint;
147 greenColorShaderPaint.setShader(greenColorShader);
148 SkImageFilter::CropRect leftSideCropRect(SkRect::MakeXYWH(0, 0, 32, 64)) ;
149 SkAutoTUnref<SkImageFilter> paintFilterLeft(SkPaintImageFilter::Create(
150 greenColorShaderPaint, &leftSideCropRect));
151 SkImageFilter::CropRect rightSideCropRect(SkRect::MakeXYWH(32, 0, 32, 64 ));
152 SkAutoTUnref<SkImageFilter> paintFilterRight(SkPaintImageFilter::Create(
153 greenColorShaderPaint, &rightSideCropRect));
154
155 this->addFilter("color filter",
156 SkColorFilterImageFilter::Create(cf.get(), input, cropRect));
157 this->addFilter("displacement map", SkDisplacementMapEffect::Create(
158 SkDisplacementMapEffect::kR_ChannelSelectorType,
159 SkDisplacementMapEffect::kB_ChannelSelectorType,
160 20.0f, gradientSource.get(), input, cropRect));
161 this->addFilter("blur", SkBlurImageFilter::Create(SK_Scalar1, SK_Scalar1 , input, cropRect));
162 this->addFilter("drop shadow", SkDropShadowImageFilter::Create(
163 SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN,
164 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, input, cropRect));
165 this->addFilter("diffuse lighting", SkLightingImageFilter::CreatePointLi tDiffuse(
166 location, SK_ColorGREEN, 0, 0, input, cropRect));
167 this->addFilter("specular lighting",
168 SkLightingImageFilter::CreatePointLitSpecular(location, SK_Col orGREEN, 0, 0, 0,
169 input, cropRect) );
170 this->addFilter("matrix convolution",
171 SkMatrixConvolutionImageFilter::Create(
172 kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1),
173 SkMatrixConvolutionImageFilter::kRepeat_TileMode, false, i nput, cropRect));
174 this->addFilter("merge", SkMergeImageFilter::Create(input, input, SkXfer mode::kSrcOver_Mode,
175 cropRect));
176 this->addFilter("merge with disjoint inputs", SkMergeImageFilter::Create (
177 paintFilterLeft, paintFilterRight, SkXfermode::kSrcOver_Mode, cropRect));
178 this->addFilter("offset",
179 SkOffsetImageFilter::Create(SK_Scalar1, SK_Scalar1, inpu t, cropRect));
180 this->addFilter("dilate", SkDilateImageFilter::Create(3, 2, input, cropR ect));
181 this->addFilter("erode", SkErodeImageFilter::Create(2, 3, input, cropRec t));
182 this->addFilter("tile", SkTileImageFilter::Create(
183 SkRect::MakeXYWH(0, 0, 50, 50),
184 cropRect ? cropRect->rect() : SkRect::MakeXYWH(0, 0, 100, 100),
185 input));
186 if (!cropRect) {
187 this->addFilter("matrix", SkImageFilter::CreateMatrixFilter(
188 matrix, kLow_SkFilterQuality, input));
189 }
190 this->addFilter("blur and offset", SkOffsetImageFilter::Create(
191 five, five, blur.get(), cropRect));
192 this->addFilter("picture and blur", SkBlurImageFilter::Create(
193 five, five, pictureFilter.get(), cropRect));
194 this->addFilter("paint and blur", SkBlurImageFilter::Create(
195 five, five, paintFilter.get(), cropRect));
196 this->addFilter("xfermode", SkXfermodeImageFilter::Create(
197 SkXfermode::Create(SkXfermode::kSrc_Mode), input, input, cropRect));
198 }
199 int count() const { return fFilters.count(); }
200 SkImageFilter* getFilter(int index) const { return fFilters[index].fFilter.g et(); }
201 const char* getName(int index) const { return fFilters[index].fName; }
202 private:
203 struct Filter {
204 Filter() : fName(nullptr), fFilter(nullptr) {}
205 Filter(const char* name, SkImageFilter* filter) : fName(name), fFilter(f ilter) {}
206 const char* fName;
207 sk_sp<SkImageFilter> fFilter;
208 };
209 void addFilter(const char* name, SkImageFilter* filter) {
210 fFilters.push_back(Filter(name, filter));
211 }
212
213 SkTArray<Filter> fFilters;
214 };
215
82 } 216 }
83 217
84 SkFlattenable* MatrixTestImageFilter::CreateProc(SkReadBuffer& buffer) { 218 SkFlattenable* MatrixTestImageFilter::CreateProc(SkReadBuffer& buffer) {
85 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); 219 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
86 skiatest::Reporter* reporter = (skiatest::Reporter*)buffer.readFunctionPtr() ; 220 skiatest::Reporter* reporter = (skiatest::Reporter*)buffer.readFunctionPtr() ;
87 SkMatrix matrix; 221 SkMatrix matrix;
88 buffer.readMatrix(&matrix); 222 buffer.readMatrix(&matrix);
89 return new MatrixTestImageFilter(reporter, matrix); 223 return new MatrixTestImageFilter(reporter, matrix);
90 } 224 }
91 225
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 // Check that all filters offset to their absolute crop rect, 446 // Check that all filters offset to their absolute crop rect,
313 // unaffected by the input crop rect. 447 // unaffected by the input crop rect.
314 // Tests pass by not asserting. 448 // Tests pass by not asserting.
315 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, proxy, 100) ); 449 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, proxy, 100) );
316 SkASSERT(srcImg); 450 SkASSERT(srcImg);
317 451
318 SkImageFilter::CropRect inputCropRect(SkRect::MakeXYWH(8, 13, 80, 80)); 452 SkImageFilter::CropRect inputCropRect(SkRect::MakeXYWH(8, 13, 80, 80));
319 SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(20, 30, 60, 60)); 453 SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(20, 30, 60, 60));
320 SkAutoTUnref<SkImageFilter> input(make_grayscale(nullptr, &inputCropRect)); 454 SkAutoTUnref<SkImageFilter> input(make_grayscale(nullptr, &inputCropRect));
321 455
322 auto cf(SkColorFilter::MakeModeFilter(SK_ColorRED, SkXfermode::kSrcIn_Mode)) ; 456 FilterList filters(input.get(), &cropRect);
323 SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1);
324 SkScalar kernel[9] = {
325 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1),
326 SkIntToScalar( 1), SkIntToScalar(-7), SkIntToScalar( 1),
327 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1),
328 };
329 SkISize kernelSize = SkISize::Make(3, 3);
330 SkScalar gain = SK_Scalar1, bias = 0;
331 457
332 SkImageFilter* filters[] = { 458 for (int i = 0; i < filters.count(); ++i) {
333 SkColorFilterImageFilter::Create(cf.get(), input.get(), &cropRect), 459 SkImageFilter* filter = filters.getFilter(i);
334 SkDisplacementMapEffect::Create(SkDisplacementMapEffect::kR_ChannelSelec torType,
335 SkDisplacementMapEffect::kB_ChannelSelec torType,
336 40.0f, input.get(), input.get(), &cropRe ct),
337 SkBlurImageFilter::Create(SK_Scalar1, SK_Scalar1, input.get(), &cropRect ),
338 SkDropShadowImageFilter::Create(SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_S calar1,
339 SK_ColorGREEN, SkDropShadowImageFilter::kDrawShadowAndForeground_Sha dowMode,
340 input.get(), &cropRect),
341 SkLightingImageFilter::CreatePointLitDiffuse(location, SK_ColorGREEN, 0, 0, input.get(), &cropRect),
342 SkLightingImageFilter::CreatePointLitSpecular(location, SK_ColorGREEN, 0 , 0, 0, input.get(), &cropRect),
343 SkMatrixConvolutionImageFilter::Create(kernelSize, kernel, gain, bias, S kIPoint::Make(1, 1), SkMatrixConvolutionImageFilter::kRepeat_TileMode, false, in put.get(), &cropRect),
344 SkMergeImageFilter::Create(input.get(), input.get(), SkXfermode::kSrcOve r_Mode, &cropRect),
345 SkOffsetImageFilter::Create(SK_Scalar1, SK_Scalar1, input.get(), &cropRe ct),
346 SkOffsetImageFilter::Create(SK_Scalar1, SK_Scalar1, input.get(), &cropRe ct),
347 SkDilateImageFilter::Create(3, 2, input.get(), &cropRect),
348 SkErodeImageFilter::Create(2, 3, input.get(), &cropRect),
349 SkTileImageFilter::Create(inputCropRect.rect(), cropRect.rect(), input.g et()),
350 SkXfermodeImageFilter::Create(SkXfermode::Create(SkXfermode::kSrcOver_Mo de), input.get(), input.get(), &cropRect),
351 };
352
353 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) {
354 SkImageFilter* filter = filters[i];
355 SkIPoint offset; 460 SkIPoint offset;
356 SkString str;
357 str.printf("filter %d", static_cast<int>(i));
358 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nul lptr); 461 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nul lptr);
359 SkAutoTUnref<SkSpecialImage> resultImg(filter->filterImage(srcImg.get(), ctx, &offset)); 462 SkAutoTUnref<SkSpecialImage> resultImg(filter->filterImage(srcImg.get(), ctx, &offset));
360 REPORTER_ASSERT_MESSAGE(reporter, resultImg, str.c_str()); 463 REPORTER_ASSERT_MESSAGE(reporter, resultImg, filters.getName(i));
361 REPORTER_ASSERT_MESSAGE(reporter, offset.fX == 20 && offset.fY == 30, st r.c_str()); 464 REPORTER_ASSERT_MESSAGE(reporter, offset.fX == 20 && offset.fY == 30, fi lters.getName(i));
362 }
363
364 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) {
365 SkSafeUnref(filters[i]);
366 } 465 }
367 } 466 }
368 467
369 static SkBitmap make_gradient_circle(int width, int height) {
370 SkBitmap bitmap;
371 SkScalar x = SkIntToScalar(width / 2);
372 SkScalar y = SkIntToScalar(height / 2);
373 SkScalar radius = SkMinScalar(x, y) * 0.8f;
374 bitmap.allocN32Pixels(width, height);
375 SkCanvas canvas(bitmap);
376 canvas.clear(0x00000000);
377 SkColor colors[2];
378 colors[0] = SK_ColorWHITE;
379 colors[1] = SK_ColorBLACK;
380 SkPaint paint;
381 paint.setShader(SkGradientShader::MakeRadial(SkPoint::Make(x, y), radius, co lors, nullptr, 2,
382 SkShader::kClamp_TileMode));
383 canvas.drawCircle(x, y, radius, paint);
384 return bitmap;
385 }
386
387
388
389 static void test_negative_blur_sigma(SkImageFilter::Proxy* proxy, 468 static void test_negative_blur_sigma(SkImageFilter::Proxy* proxy,
390 skiatest::Reporter* reporter, 469 skiatest::Reporter* reporter,
391 GrContext* context) { 470 GrContext* context) {
392 // Check that SkBlurImageFilter will accept a negative sigma, either in 471 // Check that SkBlurImageFilter will accept a negative sigma, either in
393 // the given arguments or after CTM application. 472 // the given arguments or after CTM application.
394 const int width = 32, height = 32; 473 const int width = 32, height = 32;
395 const SkScalar five = SkIntToScalar(5); 474 const SkScalar five = SkIntToScalar(5);
396 475
397 SkAutoTUnref<SkImageFilter> positiveFilter(SkBlurImageFilter::Create(five, f ive)); 476 SkAutoTUnref<SkImageFilter> positiveFilter(SkBlurImageFilter::Create(five, f ive));
398 SkAutoTUnref<SkImageFilter> negativeFilter(SkBlurImageFilter::Create(-five, five)); 477 SkAutoTUnref<SkImageFilter> negativeFilter(SkBlurImageFilter::Create(-five, five));
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 DEF_GPUTEST_FOR_NATIVE_CONTEXT(TestZeroBlurSigma_Gpu, reporter, context) { 635 DEF_GPUTEST_FOR_NATIVE_CONTEXT(TestZeroBlurSigma_Gpu, reporter, context) {
557 run_gpu_test(reporter, context, 100, test_zero_blur_sigma); 636 run_gpu_test(reporter, context, 100, test_zero_blur_sigma);
558 } 637 }
559 #endif 638 #endif
560 639
561 DEF_TEST(ImageFilterDrawTiled, reporter) { 640 DEF_TEST(ImageFilterDrawTiled, reporter) {
562 // Check that all filters when drawn tiled (with subsequent clip rects) exac tly 641 // Check that all filters when drawn tiled (with subsequent clip rects) exac tly
563 // match the same filters drawn with a single full-canvas bitmap draw. 642 // match the same filters drawn with a single full-canvas bitmap draw.
564 // Tests pass by not asserting. 643 // Tests pass by not asserting.
565 644
566 auto cf(SkColorFilter::MakeModeFilter(SK_ColorRED, SkXfermode::kSrcIn_Mode)) ; 645 FilterList filters;
567 SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1);
568 SkScalar kernel[9] = {
569 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1),
570 SkIntToScalar( 1), SkIntToScalar(-7), SkIntToScalar( 1),
571 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1),
572 };
573 const SkISize kernelSize = SkISize::Make(3, 3);
574 const SkScalar gain = SK_Scalar1, bias = 0;
575 const SkScalar five = SkIntToScalar(5);
576
577 sk_sp<SkImage> gradientImage(SkImage::MakeFromBitmap(make_gradient_circle(64 , 64)));
578 SkAutoTUnref<SkImageFilter> gradientSource(SkImageSource::Create(gradientIma ge.get()));
579 SkAutoTUnref<SkImageFilter> blur(SkBlurImageFilter::Create(five, five));
580 SkMatrix matrix;
581
582 matrix.setTranslate(SK_Scalar1, SK_Scalar1);
583 matrix.postRotate(SkIntToScalar(45), SK_Scalar1, SK_Scalar1);
584
585 SkRTreeFactory factory;
586 SkPictureRecorder recorder;
587 SkCanvas* recordingCanvas = recorder.beginRecording(64, 64, &factory, 0);
588
589 SkPaint greenPaint;
590 greenPaint.setColor(SK_ColorGREEN);
591 recordingCanvas->drawRect(SkRect::Make(SkIRect::MakeXYWH(10, 10, 30, 20)), g reenPaint);
592 sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture());
593 SkAutoTUnref<SkImageFilter> pictureFilter(SkPictureImageFilter::Create(pictu re.get()));
594 SkAutoTUnref<SkShader> shader(SkPerlinNoiseShader::CreateTurbulence(SK_Scala r1, SK_Scalar1, 1, 0));
595 SkPaint noisePaint;
596 noisePaint.setShader(shader);
597
598 SkAutoTUnref<SkImageFilter> paintFilter(SkPaintImageFilter::Create(noisePain t));
599
600 SkImageFilter::CropRect leftSideCropRect(SkRect::MakeXYWH(0, 0, 32, 64));
601 SkAutoTUnref<SkImageFilter> paintFilterLeft(SkPaintImageFilter::Create(green Paint, &leftSideCropRect));
602 SkImageFilter::CropRect rightSideCropRect(SkRect::MakeXYWH(32, 0, 32, 64));
603 SkAutoTUnref<SkImageFilter> paintFilterRight(SkPaintImageFilter::Create(gree nPaint, &rightSideCropRect));
604
605 struct {
606 const char* fName;
607 SkImageFilter* fFilter;
608 } filters[] = {
609 { "color filter", SkColorFilterImageFilter::Create(cf.get()) },
610 { "displacement map", SkDisplacementMapEffect::Create(
611 SkDisplacementMapEffect::kR_ChannelSelectorType,
612 SkDisplacementMapEffect::kB_ChannelSelectorType,
613 20.0f, gradientSource.get()) },
614 { "blur", SkBlurImageFilter::Create(SK_Scalar1, SK_Scalar1) },
615 { "drop shadow", SkDropShadowImageFilter::Create(
616 SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN,
617 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode) },
618 { "diffuse lighting", SkLightingImageFilter::CreatePointLitDiffuse(
619 location, SK_ColorGREEN, 0, 0) },
620 { "specular lighting",
621 SkLightingImageFilter::CreatePointLitSpecular(location, SK_ColorGR EEN, 0, 0, 0) },
622 { "matrix convolution",
623 SkMatrixConvolutionImageFilter::Create(
624 kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1),
625 SkMatrixConvolutionImageFilter::kRepeat_TileMode, false) },
626 { "merge", SkMergeImageFilter::Create(nullptr, nullptr, SkXfermode::kSrc Over_Mode) },
627 { "merge with disjoint inputs", SkMergeImageFilter::Create(
628 paintFilterLeft, paintFilterRight, SkXfermode::kSrcOver_Mode) },
629 { "offset", SkOffsetImageFilter::Create(SK_Scalar1, SK_Scalar1) },
630 { "dilate", SkDilateImageFilter::Create(3, 2) },
631 { "erode", SkErodeImageFilter::Create(2, 3) },
632 { "tile", SkTileImageFilter::Create(SkRect::MakeXYWH(0, 0, 50, 50),
633 SkRect::MakeXYWH(0, 0, 100, 100), nu llptr) },
634 { "matrix", SkImageFilter::CreateMatrixFilter(matrix, kLow_SkFilterQuali ty) },
635 { "blur and offset", SkOffsetImageFilter::Create(five, five, blur.get()) },
636 { "picture and blur", SkBlurImageFilter::Create(five, five, pictureFilte r.get()) },
637 { "paint and blur", SkBlurImageFilter::Create(five, five, paintFilter.ge t()) },
638 };
639 646
640 SkBitmap untiledResult, tiledResult; 647 SkBitmap untiledResult, tiledResult;
641 const int width = 64, height = 64; 648 const int width = 64, height = 64;
642 untiledResult.allocN32Pixels(width, height); 649 untiledResult.allocN32Pixels(width, height);
643 tiledResult.allocN32Pixels(width, height); 650 tiledResult.allocN32Pixels(width, height);
644 SkCanvas tiledCanvas(tiledResult); 651 SkCanvas tiledCanvas(tiledResult);
645 SkCanvas untiledCanvas(untiledResult); 652 SkCanvas untiledCanvas(untiledResult);
646 int tileSize = 8; 653 int tileSize = 8;
647 654
648 for (int scale = 1; scale <= 2; ++scale) { 655 for (int scale = 1; scale <= 2; ++scale) {
649 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { 656 for (int i = 0; i < filters.count(); ++i) {
650 tiledCanvas.clear(0); 657 tiledCanvas.clear(0);
651 untiledCanvas.clear(0); 658 untiledCanvas.clear(0);
652 SkPaint paint; 659 SkPaint paint;
653 paint.setImageFilter(filters[i].fFilter); 660 paint.setImageFilter(filters.getFilter(i));
654 paint.setTextSize(SkIntToScalar(height)); 661 paint.setTextSize(SkIntToScalar(height));
655 paint.setColor(SK_ColorWHITE); 662 paint.setColor(SK_ColorWHITE);
656 SkString str; 663 SkString str;
657 const char* text = "ABC"; 664 const char* text = "ABC";
658 SkScalar ypos = SkIntToScalar(height); 665 SkScalar ypos = SkIntToScalar(height);
659 untiledCanvas.save(); 666 untiledCanvas.save();
660 untiledCanvas.scale(SkIntToScalar(scale), SkIntToScalar(scale)); 667 untiledCanvas.scale(SkIntToScalar(scale), SkIntToScalar(scale));
661 untiledCanvas.drawText(text, strlen(text), 0, ypos, paint); 668 untiledCanvas.drawText(text, strlen(text), 0, ypos, paint);
662 untiledCanvas.restore(); 669 untiledCanvas.restore();
663 for (int y = 0; y < height; y += tileSize) { 670 for (int y = 0; y < height; y += tileSize) {
664 for (int x = 0; x < width; x += tileSize) { 671 for (int x = 0; x < width; x += tileSize) {
665 tiledCanvas.save(); 672 tiledCanvas.save();
666 tiledCanvas.clipRect(SkRect::Make(SkIRect::MakeXYWH(x, y, ti leSize, tileSize))); 673 tiledCanvas.clipRect(SkRect::Make(SkIRect::MakeXYWH(x, y, ti leSize, tileSize)));
667 tiledCanvas.scale(SkIntToScalar(scale), SkIntToScalar(scale) ); 674 tiledCanvas.scale(SkIntToScalar(scale), SkIntToScalar(scale) );
668 tiledCanvas.drawText(text, strlen(text), 0, ypos, paint); 675 tiledCanvas.drawText(text, strlen(text), 0, ypos, paint);
669 tiledCanvas.restore(); 676 tiledCanvas.restore();
670 } 677 }
671 } 678 }
672 untiledCanvas.flush(); 679 untiledCanvas.flush();
673 tiledCanvas.flush(); 680 tiledCanvas.flush();
674 for (int y = 0; y < height; y++) { 681 for (int y = 0; y < height; y++) {
675 int diffs = memcmp(untiledResult.getAddr32(0, y), tiledResult.ge tAddr32(0, y), untiledResult.rowBytes()); 682 int diffs = memcmp(untiledResult.getAddr32(0, y), tiledResult.ge tAddr32(0, y), untiledResult.rowBytes());
676 REPORTER_ASSERT_MESSAGE(reporter, !diffs, filters[i].fName); 683 REPORTER_ASSERT_MESSAGE(reporter, !diffs, filters.getName(i));
677 if (diffs) { 684 if (diffs) {
678 break; 685 break;
679 } 686 }
680 } 687 }
681 } 688 }
682 } 689 }
683
684 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) {
685 SkSafeUnref(filters[i].fFilter);
686 }
687 } 690 }
688 691
689 static void draw_saveLayer_picture(int width, int height, int tileSize, 692 static void draw_saveLayer_picture(int width, int height, int tileSize,
690 SkBBHFactory* factory, SkBitmap* result) { 693 SkBBHFactory* factory, SkBitmap* result) {
691 694
692 SkMatrix matrix; 695 SkMatrix matrix;
693 matrix.setTranslate(SkIntToScalar(50), 0); 696 matrix.setTranslate(SkIntToScalar(50), 0);
694 697
695 auto cf(SkColorFilter::MakeModeFilter(SK_ColorWHITE, SkXfermode::kSrc_Mode)) ; 698 auto cf(SkColorFilter::MakeModeFilter(SK_ColorWHITE, SkXfermode::kSrc_Mode)) ;
696 SkAutoTUnref<SkImageFilter> cfif(SkColorFilterImageFilter::Create(cf.get())) ; 699 SkAutoTUnref<SkImageFilter> cfif(SkColorFilterImageFilter::Create(cf.get())) ;
(...skipping 896 matching lines...) Expand 10 before | Expand all | Expand 10 after
1593 test_xfermode_cropped_input(&canvas, reporter); 1596 test_xfermode_cropped_input(&canvas, reporter);
1594 } 1597 }
1595 1598
1596 DEF_GPUTEST_FOR_ALL_CONTEXTS(BlurLargeImage_Gpu, reporter, context) { 1599 DEF_GPUTEST_FOR_ALL_CONTEXTS(BlurLargeImage_Gpu, reporter, context) {
1597 SkAutoTUnref<SkSurface> surface( 1600 SkAutoTUnref<SkSurface> surface(
1598 SkSurface::NewRenderTarget(context, SkBudgeted::kYes, 1601 SkSurface::NewRenderTarget(context, SkBudgeted::kYes,
1599 SkImageInfo::MakeN32Premul(100, 100))); 1602 SkImageInfo::MakeN32Premul(100, 100)));
1600 test_large_blur_input(reporter, surface->getCanvas()); 1603 test_large_blur_input(reporter, surface->getCanvas());
1601 } 1604 }
1602 #endif 1605 #endif
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698