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 "SkBitmapSource.h" | 10 #include "SkBitmapSource.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 | 51 |
52 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context& ctx, | 52 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context& ctx, |
53 SkBitmap* result, SkIPoint* offset) const SK_OVER
RIDE { | 53 SkBitmap* result, SkIPoint* offset) const SK_OVER
RIDE { |
54 REPORTER_ASSERT(fReporter, ctx.ctm() == fExpectedMatrix); | 54 REPORTER_ASSERT(fReporter, ctx.ctm() == fExpectedMatrix); |
55 return true; | 55 return true; |
56 } | 56 } |
57 | 57 |
58 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(MatrixTestImageFilter) | 58 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(MatrixTestImageFilter) |
59 | 59 |
60 protected: | 60 protected: |
| 61 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING |
| 62 explicit MatrixTestImageFilter(SkReadBuffer& buffer) : SkImageFilter(0, NULL
) { |
| 63 fReporter = static_cast<skiatest::Reporter*>(buffer.readFunctionPtr()); |
| 64 buffer.readMatrix(&fExpectedMatrix); |
| 65 } |
| 66 #endif |
| 67 |
61 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE { | 68 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE { |
62 this->INHERITED::flatten(buffer); | 69 this->INHERITED::flatten(buffer); |
63 buffer.writeFunctionPtr(fReporter); | 70 buffer.writeFunctionPtr(fReporter); |
64 buffer.writeMatrix(fExpectedMatrix); | 71 buffer.writeMatrix(fExpectedMatrix); |
65 } | 72 } |
66 | 73 |
67 private: | 74 private: |
68 skiatest::Reporter* fReporter; | 75 skiatest::Reporter* fReporter; |
69 SkMatrix fExpectedMatrix; | 76 SkMatrix fExpectedMatrix; |
70 | 77 |
71 typedef SkImageFilter INHERITED; | 78 typedef SkImageFilter INHERITED; |
72 }; | 79 }; |
73 | 80 |
74 } | 81 } |
75 | 82 |
76 SkFlattenable* MatrixTestImageFilter::CreateProc(SkReadBuffer& buffer) { | 83 SkFlattenable* MatrixTestImageFilter::CreateProc(SkReadBuffer& buffer) { |
77 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); | 84 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); |
78 skiatest::Reporter* reporter = (skiatest::Reporter*)buffer.readFunctionPtr()
; | 85 skiatest::Reporter* reporter = (skiatest::Reporter*)buffer.readFunctionPtr()
; |
79 SkMatrix matrix; | 86 SkMatrix matrix; |
80 buffer.readMatrix(&matrix); | 87 buffer.readMatrix(&matrix); |
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
473 } | 480 } |
474 } | 481 } |
475 } | 482 } |
476 } | 483 } |
477 | 484 |
478 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { | 485 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { |
479 SkSafeUnref(filters[i].fFilter); | 486 SkSafeUnref(filters[i].fFilter); |
480 } | 487 } |
481 } | 488 } |
482 | 489 |
483 static void draw_saveLayer_picture(int width, int height, int tileSize, | 490 static void draw_saveLayer_picture(int width, int height, int tileSize, |
484 SkBBHFactory* factory, SkBitmap* result) { | 491 SkBBHFactory* factory, SkBitmap* result) { |
485 | 492 |
486 SkMatrix matrix; | 493 SkMatrix matrix; |
487 matrix.setTranslate(SkIntToScalar(50), 0); | 494 matrix.setTranslate(SkIntToScalar(50), 0); |
488 | 495 |
489 SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateModeFilter(SK_ColorWHITE
, SkXfermode::kSrc_Mode)); | 496 SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateModeFilter(SK_ColorWHITE
, SkXfermode::kSrc_Mode)); |
490 SkAutoTUnref<SkImageFilter> cfif(SkColorFilterImageFilter::Create(cf.get()))
; | 497 SkAutoTUnref<SkImageFilter> cfif(SkColorFilterImageFilter::Create(cf.get()))
; |
491 SkAutoTUnref<SkImageFilter> imageFilter(SkMatrixImageFilter::Create(matrix,
SkPaint::kNone_FilterLevel, cfif.get())); | 498 SkAutoTUnref<SkImageFilter> imageFilter(SkMatrixImageFilter::Create(matrix,
SkPaint::kNone_FilterLevel, cfif.get())); |
492 | 499 |
493 SkPaint paint; | 500 SkPaint paint; |
494 paint.setImageFilter(imageFilter.get()); | 501 paint.setImageFilter(imageFilter.get()); |
495 SkPictureRecorder recorder; | 502 SkPictureRecorder recorder; |
496 SkRect bounds = SkRect::Make(SkIRect::MakeXYWH(0, 0, 50, 50)); | 503 SkRect bounds = SkRect::Make(SkIRect::MakeXYWH(0, 0, 50, 50)); |
497 SkCanvas* recordingCanvas = recorder.beginRecording(SkIntToScalar(width), | 504 SkCanvas* recordingCanvas = recorder.beginRecording(SkIntToScalar(width), |
498 SkIntToScalar(height), | 505 SkIntToScalar(height), |
499 factory, 0); | 506 factory, 0); |
500 recordingCanvas->translate(-55, 0); | 507 recordingCanvas->translate(-55, 0); |
501 recordingCanvas->saveLayer(&bounds, &paint); | 508 recordingCanvas->saveLayer(&bounds, &paint); |
502 recordingCanvas->restore(); | 509 recordingCanvas->restore(); |
503 SkAutoTUnref<SkPicture> picture1(recorder.endRecording()); | 510 SkAutoTUnref<SkPicture> picture1(recorder.endRecording()); |
504 | 511 |
505 result->allocN32Pixels(width, height); | 512 result->allocN32Pixels(width, height); |
506 SkCanvas canvas(*result); | 513 SkCanvas canvas(*result); |
507 canvas.clear(0); | 514 canvas.clear(0); |
508 canvas.clipRect(SkRect::Make(SkIRect::MakeWH(tileSize, tileSize))); | 515 canvas.clipRect(SkRect::Make(SkIRect::MakeWH(tileSize, tileSize))); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
611 SkCanvas canvas2(result2); | 618 SkCanvas canvas2(result2); |
612 int tileSize = 8; | 619 int tileSize = 8; |
613 | 620 |
614 canvas1.clear(0); | 621 canvas1.clear(0); |
615 canvas2.clear(0); | 622 canvas2.clear(0); |
616 | 623 |
617 SkRTreeFactory factory; | 624 SkRTreeFactory factory; |
618 | 625 |
619 SkPictureRecorder recorder1, recorder2; | 626 SkPictureRecorder recorder1, recorder2; |
620 // The only difference between these two pictures is that one has RTree acel
eration. | 627 // The only difference between these two pictures is that one has RTree acel
eration. |
621 SkCanvas* recordingCanvas1 = recorder1.beginRecording(SkIntToScalar(width), | 628 SkCanvas* recordingCanvas1 = recorder1.beginRecording(SkIntToScalar(width), |
622 SkIntToScalar(height), | 629 SkIntToScalar(height),
|
623 NULL, 0); | 630 NULL, 0); |
624 SkCanvas* recordingCanvas2 = recorder2.beginRecording(SkIntToScalar(width), | 631 SkCanvas* recordingCanvas2 = recorder2.beginRecording(SkIntToScalar(width), |
625 SkIntToScalar(height), | 632 SkIntToScalar(height),
|
626 &factory, 0); | 633 &factory, 0); |
627 draw_blurred_rect(recordingCanvas1); | 634 draw_blurred_rect(recordingCanvas1); |
628 draw_blurred_rect(recordingCanvas2); | 635 draw_blurred_rect(recordingCanvas2); |
629 SkAutoTUnref<SkPicture> picture1(recorder1.endRecording()); | 636 SkAutoTUnref<SkPicture> picture1(recorder1.endRecording()); |
630 SkAutoTUnref<SkPicture> picture2(recorder2.endRecording()); | 637 SkAutoTUnref<SkPicture> picture2(recorder2.endRecording()); |
631 for (int y = 0; y < height; y += tileSize) { | 638 for (int y = 0; y < height; y += tileSize) { |
632 for (int x = 0; x < width; x += tileSize) { | 639 for (int x = 0; x < width; x += tileSize) { |
633 SkRect tileRect = SkRect::Make(SkIRect::MakeXYWH(x, y, tileSize, til
eSize)); | 640 SkRect tileRect = SkRect::Make(SkIRect::MakeXYWH(x, y, tileSize, til
eSize)); |
634 draw_picture_clipped(&canvas1, tileRect, picture1); | 641 draw_picture_clipped(&canvas1, tileRect, picture1); |
635 draw_picture_clipped(&canvas2, tileRect, picture2); | 642 draw_picture_clipped(&canvas2, tileRect, picture2); |
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1088 | 1095 |
1089 DEF_GPUTEST(TestNegativeBlurSigmaGPU, reporter, factory) { | 1096 DEF_GPUTEST(TestNegativeBlurSigmaGPU, reporter, factory) { |
1090 GrContext* context = factory->get(static_cast<GrContextFactory::GLContextTyp
e>(0)); | 1097 GrContext* context = factory->get(static_cast<GrContextFactory::GLContextTyp
e>(0)); |
1091 SkAutoTUnref<SkGpuDevice> device(SkGpuDevice::Create(context, | 1098 SkAutoTUnref<SkGpuDevice> device(SkGpuDevice::Create(context, |
1092 SkImageInfo::MakeN32Pre
mul(1, 1), | 1099 SkImageInfo::MakeN32Pre
mul(1, 1), |
1093 gProps, | 1100 gProps, |
1094 0)); | 1101 0)); |
1095 test_negative_blur_sigma(device, reporter); | 1102 test_negative_blur_sigma(device, reporter); |
1096 } | 1103 } |
1097 #endif | 1104 #endif |
OLD | NEW |