Chromium Code Reviews| 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 |