OLD | NEW |
---|---|
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 Loading... | |
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() { | |
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)); | |
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(SK_S calar1, SK_Scalar1, 1, 0)); | |
139 | |
140 SkPaint paint; | |
141 paint.setShader(shader); | |
142 SkAutoTUnref<SkImageFilter> paintFilter(SkPaintImageFilter::Create(paint )); | |
143 | |
144 sk_sp<SkShader> greenColorShader(SkShader::MakeColorShader(SK_ColorGREEN )); | |
145 SkPaint greenColorShaderPaint; | |
146 greenColorShaderPaint.setShader(greenColorShader); | |
147 SkImageFilter::CropRect leftSideCropRect(SkRect::MakeXYWH(0, 0, 32, 64)) ; | |
148 SkAutoTUnref<SkImageFilter> paintFilterLeft(SkPaintImageFilter::Create(g reenColorShaderPaint, &leftSideCropRect)); | |
149 SkImageFilter::CropRect rightSideCropRect(SkRect::MakeXYWH(32, 0, 32, 64 )); | |
150 SkAutoTUnref<SkImageFilter> paintFilterRight(SkPaintImageFilter::Create( greenColorShaderPaint, &rightSideCropRect)); | |
151 | |
robertphillips
2016/03/23 19:48:48
all these become "this->addFilter" ?
Stephen White
2016/03/23 20:03:00
Done.
| |
152 AddFilter("color filter", SkColorFilterImageFilter::Create(cf.get())); | |
153 AddFilter("displacement map", SkDisplacementMapEffect::Create( | |
154 SkDisplacementMapEffect::kR_ChannelSelectorType, | |
155 SkDisplacementMapEffect::kB_ChannelSelectorType, | |
156 20.0f, gradientSource.get())); | |
157 AddFilter("blur", SkBlurImageFilter::Create(SK_Scalar1, SK_Scalar1)); | |
158 AddFilter("drop shadow", SkDropShadowImageFilter::Create( | |
159 SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN, | |
160 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode)) ; | |
161 AddFilter("diffuse lighting", SkLightingImageFilter::CreatePointLitDiffu se( | |
162 location, SK_ColorGREEN, 0, 0)); | |
163 AddFilter("specular lighting", | |
164 SkLightingImageFilter::CreatePointLitSpecular(location, SK_Col orGREEN, 0, 0, 0)); | |
165 AddFilter("matrix convolution", | |
166 SkMatrixConvolutionImageFilter::Create( | |
167 kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1), | |
168 SkMatrixConvolutionImageFilter::kRepeat_TileMode, false)); | |
169 AddFilter("merge", SkMergeImageFilter::Create(nullptr, nullptr, SkXfermo de::kSrcOver_Mode)); | |
170 AddFilter("merge with disjoint inputs", SkMergeImageFilter::Create( | |
171 paintFilterLeft, paintFilterRight, SkXfermode::kSrcOver_Mode)) ; | |
172 AddFilter("offset", SkOffsetImageFilter::Create(SK_Scalar1, SK_Scalar1)) ; | |
173 AddFilter("dilate", SkDilateImageFilter::Create(3, 2)); | |
174 AddFilter("erode", SkErodeImageFilter::Create(2, 3)); | |
175 AddFilter("tile", SkTileImageFilter::Create(SkRect::MakeXYWH(0, 0, 50, 5 0), | |
176 SkRect::MakeXYWH(0, 0, 100, 100) , nullptr)); | |
177 AddFilter("matrix", SkImageFilter::CreateMatrixFilter(matrix, kLow_SkFil terQuality)); | |
178 AddFilter("blur and offset", SkOffsetImageFilter::Create(five, five, blu r.get())); | |
179 AddFilter("picture and blur", SkBlurImageFilter::Create(five, five, pict ureFilter.get())); | |
180 AddFilter("rect shader and blur", SkBlurImageFilter::Create(five, five, paintFilter.get())); | |
181 AddFilter("xfermode", SkXfermodeImageFilter::Create(SkXfermode::Create(S kXfermode::kSrc_Mode), nullptr)); | |
182 } | |
183 ~FilterList() { | |
184 for (int i = 0; i < count(); ++i) { | |
185 getFilter(i)->unref(); | |
186 } | |
187 } | |
188 int count() const { return fFilters.count(); } | |
189 SkImageFilter* getFilter(int index) const { return fFilters[index].fFilter; } | |
190 const char* getName(int index) const { return fFilters[index].fName; } | |
191 private: | |
192 struct Filter { | |
193 Filter() : fName(nullptr), fFilter(nullptr) {} | |
194 Filter(const char* name, SkImageFilter* filter) : fName(name), fFilter(f ilter) {} | |
195 const char* fName; | |
robertphillips
2016/03/23 19:48:48
Could we make these SkAutoTUnrefs and remove the a
Stephen White
2016/03/23 20:03:00
Done.
| |
196 SkImageFilter* fFilter; | |
197 }; | |
robertphillips
2016/03/23 19:48:48
addFilter ?
Stephen White
2016/03/23 20:03:00
Done.
| |
198 void AddFilter(const char* name, SkImageFilter* filter) { | |
199 fFilters.push_back() = Filter(name, filter); | |
200 } | |
201 | |
202 SkTArray<Filter> fFilters; | |
203 }; | |
204 | |
82 } | 205 } |
83 | 206 |
84 SkFlattenable* MatrixTestImageFilter::CreateProc(SkReadBuffer& buffer) { | 207 SkFlattenable* MatrixTestImageFilter::CreateProc(SkReadBuffer& buffer) { |
85 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); | 208 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); |
86 skiatest::Reporter* reporter = (skiatest::Reporter*)buffer.readFunctionPtr() ; | 209 skiatest::Reporter* reporter = (skiatest::Reporter*)buffer.readFunctionPtr() ; |
87 SkMatrix matrix; | 210 SkMatrix matrix; |
88 buffer.readMatrix(&matrix); | 211 buffer.readMatrix(&matrix); |
89 return new MatrixTestImageFilter(reporter, matrix); | 212 return new MatrixTestImageFilter(reporter, matrix); |
90 } | 213 } |
91 | 214 |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
359 SkAutoTUnref<SkSpecialImage> resultImg(filter->filterImage(srcImg.get(), ctx, &offset)); | 482 SkAutoTUnref<SkSpecialImage> resultImg(filter->filterImage(srcImg.get(), ctx, &offset)); |
360 REPORTER_ASSERT_MESSAGE(reporter, resultImg, str.c_str()); | 483 REPORTER_ASSERT_MESSAGE(reporter, resultImg, str.c_str()); |
361 REPORTER_ASSERT_MESSAGE(reporter, offset.fX == 20 && offset.fY == 30, st r.c_str()); | 484 REPORTER_ASSERT_MESSAGE(reporter, offset.fX == 20 && offset.fY == 30, st r.c_str()); |
362 } | 485 } |
363 | 486 |
364 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { | 487 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { |
365 SkSafeUnref(filters[i]); | 488 SkSafeUnref(filters[i]); |
366 } | 489 } |
367 } | 490 } |
368 | 491 |
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, | 492 static void test_negative_blur_sigma(SkImageFilter::Proxy* proxy, |
390 skiatest::Reporter* reporter, | 493 skiatest::Reporter* reporter, |
391 GrContext* context) { | 494 GrContext* context) { |
392 // Check that SkBlurImageFilter will accept a negative sigma, either in | 495 // Check that SkBlurImageFilter will accept a negative sigma, either in |
393 // the given arguments or after CTM application. | 496 // the given arguments or after CTM application. |
394 const int width = 32, height = 32; | 497 const int width = 32, height = 32; |
395 const SkScalar five = SkIntToScalar(5); | 498 const SkScalar five = SkIntToScalar(5); |
396 | 499 |
397 SkAutoTUnref<SkImageFilter> positiveFilter(SkBlurImageFilter::Create(five, f ive)); | 500 SkAutoTUnref<SkImageFilter> positiveFilter(SkBlurImageFilter::Create(five, f ive)); |
398 SkAutoTUnref<SkImageFilter> negativeFilter(SkBlurImageFilter::Create(-five, five)); | 501 SkAutoTUnref<SkImageFilter> negativeFilter(SkBlurImageFilter::Create(-five, five)); |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
556 DEF_GPUTEST_FOR_NATIVE_CONTEXT(TestZeroBlurSigma_Gpu, reporter, context) { | 659 DEF_GPUTEST_FOR_NATIVE_CONTEXT(TestZeroBlurSigma_Gpu, reporter, context) { |
557 run_gpu_test(reporter, context, 100, test_zero_blur_sigma); | 660 run_gpu_test(reporter, context, 100, test_zero_blur_sigma); |
558 } | 661 } |
559 #endif | 662 #endif |
560 | 663 |
561 DEF_TEST(ImageFilterDrawTiled, reporter) { | 664 DEF_TEST(ImageFilterDrawTiled, reporter) { |
562 // Check that all filters when drawn tiled (with subsequent clip rects) exac tly | 665 // 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. | 666 // match the same filters drawn with a single full-canvas bitmap draw. |
564 // Tests pass by not asserting. | 667 // Tests pass by not asserting. |
565 | 668 |
566 auto cf(SkColorFilter::MakeModeFilter(SK_ColorRED, SkXfermode::kSrcIn_Mode)) ; | 669 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 | 670 |
640 SkBitmap untiledResult, tiledResult; | 671 SkBitmap untiledResult, tiledResult; |
641 const int width = 64, height = 64; | 672 const int width = 64, height = 64; |
642 untiledResult.allocN32Pixels(width, height); | 673 untiledResult.allocN32Pixels(width, height); |
643 tiledResult.allocN32Pixels(width, height); | 674 tiledResult.allocN32Pixels(width, height); |
644 SkCanvas tiledCanvas(tiledResult); | 675 SkCanvas tiledCanvas(tiledResult); |
645 SkCanvas untiledCanvas(untiledResult); | 676 SkCanvas untiledCanvas(untiledResult); |
646 int tileSize = 8; | 677 int tileSize = 8; |
647 | 678 |
648 for (int scale = 1; scale <= 2; ++scale) { | 679 for (int scale = 1; scale <= 2; ++scale) { |
649 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { | 680 for (int i = 0; i < filters.count(); ++i) { |
650 tiledCanvas.clear(0); | 681 tiledCanvas.clear(0); |
651 untiledCanvas.clear(0); | 682 untiledCanvas.clear(0); |
652 SkPaint paint; | 683 SkPaint paint; |
653 paint.setImageFilter(filters[i].fFilter); | 684 paint.setImageFilter(filters.getFilter(i)); |
654 paint.setTextSize(SkIntToScalar(height)); | 685 paint.setTextSize(SkIntToScalar(height)); |
655 paint.setColor(SK_ColorWHITE); | 686 paint.setColor(SK_ColorWHITE); |
656 SkString str; | 687 SkString str; |
657 const char* text = "ABC"; | 688 const char* text = "ABC"; |
658 SkScalar ypos = SkIntToScalar(height); | 689 SkScalar ypos = SkIntToScalar(height); |
659 untiledCanvas.save(); | 690 untiledCanvas.save(); |
660 untiledCanvas.scale(SkIntToScalar(scale), SkIntToScalar(scale)); | 691 untiledCanvas.scale(SkIntToScalar(scale), SkIntToScalar(scale)); |
661 untiledCanvas.drawText(text, strlen(text), 0, ypos, paint); | 692 untiledCanvas.drawText(text, strlen(text), 0, ypos, paint); |
662 untiledCanvas.restore(); | 693 untiledCanvas.restore(); |
663 for (int y = 0; y < height; y += tileSize) { | 694 for (int y = 0; y < height; y += tileSize) { |
664 for (int x = 0; x < width; x += tileSize) { | 695 for (int x = 0; x < width; x += tileSize) { |
665 tiledCanvas.save(); | 696 tiledCanvas.save(); |
666 tiledCanvas.clipRect(SkRect::Make(SkIRect::MakeXYWH(x, y, ti leSize, tileSize))); | 697 tiledCanvas.clipRect(SkRect::Make(SkIRect::MakeXYWH(x, y, ti leSize, tileSize))); |
667 tiledCanvas.scale(SkIntToScalar(scale), SkIntToScalar(scale) ); | 698 tiledCanvas.scale(SkIntToScalar(scale), SkIntToScalar(scale) ); |
668 tiledCanvas.drawText(text, strlen(text), 0, ypos, paint); | 699 tiledCanvas.drawText(text, strlen(text), 0, ypos, paint); |
669 tiledCanvas.restore(); | 700 tiledCanvas.restore(); |
670 } | 701 } |
671 } | 702 } |
672 untiledCanvas.flush(); | 703 untiledCanvas.flush(); |
673 tiledCanvas.flush(); | 704 tiledCanvas.flush(); |
674 for (int y = 0; y < height; y++) { | 705 for (int y = 0; y < height; y++) { |
675 int diffs = memcmp(untiledResult.getAddr32(0, y), tiledResult.ge tAddr32(0, y), untiledResult.rowBytes()); | 706 int diffs = memcmp(untiledResult.getAddr32(0, y), tiledResult.ge tAddr32(0, y), untiledResult.rowBytes()); |
676 REPORTER_ASSERT_MESSAGE(reporter, !diffs, filters[i].fName); | 707 REPORTER_ASSERT_MESSAGE(reporter, !diffs, filters.getName(i)); |
677 if (diffs) { | 708 if (diffs) { |
678 break; | 709 break; |
679 } | 710 } |
680 } | 711 } |
681 } | 712 } |
682 } | 713 } |
683 | |
684 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { | |
685 SkSafeUnref(filters[i].fFilter); | |
686 } | |
687 } | 714 } |
688 | 715 |
689 static void draw_saveLayer_picture(int width, int height, int tileSize, | 716 static void draw_saveLayer_picture(int width, int height, int tileSize, |
690 SkBBHFactory* factory, SkBitmap* result) { | 717 SkBBHFactory* factory, SkBitmap* result) { |
691 | 718 |
692 SkMatrix matrix; | 719 SkMatrix matrix; |
693 matrix.setTranslate(SkIntToScalar(50), 0); | 720 matrix.setTranslate(SkIntToScalar(50), 0); |
694 | 721 |
695 auto cf(SkColorFilter::MakeModeFilter(SK_ColorWHITE, SkXfermode::kSrc_Mode)) ; | 722 auto cf(SkColorFilter::MakeModeFilter(SK_ColorWHITE, SkXfermode::kSrc_Mode)) ; |
696 SkAutoTUnref<SkImageFilter> cfif(SkColorFilterImageFilter::Create(cf.get())) ; | 723 SkAutoTUnref<SkImageFilter> cfif(SkColorFilterImageFilter::Create(cf.get())) ; |
(...skipping 896 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1593 test_xfermode_cropped_input(&canvas, reporter); | 1620 test_xfermode_cropped_input(&canvas, reporter); |
1594 } | 1621 } |
1595 | 1622 |
1596 DEF_GPUTEST_FOR_ALL_CONTEXTS(BlurLargeImage_Gpu, reporter, context) { | 1623 DEF_GPUTEST_FOR_ALL_CONTEXTS(BlurLargeImage_Gpu, reporter, context) { |
1597 SkAutoTUnref<SkSurface> surface( | 1624 SkAutoTUnref<SkSurface> surface( |
1598 SkSurface::NewRenderTarget(context, SkBudgeted::kYes, | 1625 SkSurface::NewRenderTarget(context, SkBudgeted::kYes, |
1599 SkImageInfo::MakeN32Premul(100, 100))); | 1626 SkImageInfo::MakeN32Premul(100, 100))); |
1600 test_large_blur_input(reporter, surface->getCanvas()); | 1627 test_large_blur_input(reporter, surface->getCanvas()); |
1601 } | 1628 } |
1602 #endif | 1629 #endif |
OLD | NEW |