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

Side by Side Diff: gm/imagefiltersclipped.cpp

Issue 1245983002: Run noise shader separately in imagefiltersclipped (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Address comments Created 5 years, 5 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 * Copyright 2014 Google Inc. 2 * Copyright 2014 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 "sk_tool_utils.h" 8 #include "sk_tool_utils.h"
9 #include "SkBitmapSource.h" 9 #include "SkBitmapSource.h"
10 #include "SkBlurImageFilter.h" 10 #include "SkBlurImageFilter.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 colors[1] = SK_ColorBLACK; 52 colors[1] = SK_ColorBLACK;
53 SkAutoTUnref<SkShader> shader( 53 SkAutoTUnref<SkShader> shader(
54 SkGradientShader::CreateRadial(SkPoint::Make(x, y), radius, colors, NULL, 2, 54 SkGradientShader::CreateRadial(SkPoint::Make(x, y), radius, colors, NULL, 2,
55 SkShader::kClamp_TileMode) 55 SkShader::kClamp_TileMode)
56 ); 56 );
57 SkPaint paint; 57 SkPaint paint;
58 paint.setShader(shader); 58 paint.setShader(shader);
59 canvas.drawCircle(x, y, radius, paint); 59 canvas.drawCircle(x, y, radius, paint);
60 } 60 }
61 61
62 static void draw_clipped_filter(SkCanvas* canvas, SkImageFilter* filter, siz e_t i,
63 const SkRect& primBounds, const SkRect& clip Bounds) {
64 SkPaint paint;
65 paint.setColor(SK_ColorWHITE);
66 paint.setImageFilter(filter);
67 paint.setAntiAlias(true);
68 canvas->save();
69 canvas->clipRect(clipBounds);
70 if (5 == i) {
71 canvas->translate(SkIntToScalar(16), SkIntToScalar(-32));
72 } else if (6 == i) {
73 canvas->scale(SkScalarInvert(RESIZE_FACTOR_X),
74 SkScalarInvert(RESIZE_FACTOR_Y));
75 }
76 canvas->drawCircle(primBounds.centerX(), primBounds.centerY(),
77 primBounds.width() * 2 / 5, paint);
78 canvas->restore();
79 }
80
62 void onDraw(SkCanvas* canvas) override { 81 void onDraw(SkCanvas* canvas) override {
63 if (!fInitialized) { 82 if (!fInitialized) {
64 fCheckerboard.allocN32Pixels(64, 64); 83 fCheckerboard.allocN32Pixels(64, 64);
65 SkCanvas checkerboardCanvas(fCheckerboard); 84 SkCanvas checkerboardCanvas(fCheckerboard);
66 sk_tool_utils::draw_checkerboard(&checkerboardCanvas, 0xFFA0A0A0, 0x FF404040, 8); 85 sk_tool_utils::draw_checkerboard(&checkerboardCanvas, 0xFFA0A0A0, 0x FF404040, 8);
67 86
68 this->make_gradient_circle(64, 64); 87 this->make_gradient_circle(64, 64);
69 fInitialized = true; 88 fInitialized = true;
70 } 89 }
71 canvas->clear(SK_ColorBLACK); 90 canvas->clear(SK_ColorBLACK);
(...skipping 12 matching lines...) Expand all
84 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode), 103 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode),
85 SkDisplacementMapEffect::Create(SkDisplacementMapEffect::kR_ChannelS electorType, 104 SkDisplacementMapEffect::Create(SkDisplacementMapEffect::kR_ChannelS electorType,
86 SkDisplacementMapEffect::kR_ChannelS electorType, 105 SkDisplacementMapEffect::kR_ChannelS electorType,
87 SkIntToScalar(12), 106 SkIntToScalar(12),
88 gradient.get(), 107 gradient.get(),
89 checkerboard.get()), 108 checkerboard.get()),
90 SkDilateImageFilter::Create(2, 2, checkerboard.get()), 109 SkDilateImageFilter::Create(2, 2, checkerboard.get()),
91 SkErodeImageFilter::Create(2, 2, checkerboard.get()), 110 SkErodeImageFilter::Create(2, 2, checkerboard.get()),
92 SkOffsetImageFilter::Create(SkIntToScalar(-16), SkIntToScalar(32)), 111 SkOffsetImageFilter::Create(SkIntToScalar(-16), SkIntToScalar(32)),
93 SkImageFilter::CreateMatrixFilter(resizeMatrix, kNone_SkFilterQualit y), 112 SkImageFilter::CreateMatrixFilter(resizeMatrix, kNone_SkFilterQualit y),
94 SkRectShaderImageFilter::Create(noise),
95 }; 113 };
96 114
97 SkRect r = SkRect::MakeWH(SkIntToScalar(64), SkIntToScalar(64)); 115 SkRect r = SkRect::MakeWH(SkIntToScalar(64), SkIntToScalar(64));
98 SkScalar margin = SkIntToScalar(16); 116 SkScalar margin = SkIntToScalar(16);
99 SkRect bounds = r; 117 SkRect bounds = r;
100 bounds.outset(margin, margin); 118 bounds.outset(margin, margin);
101 119
120 canvas->save();
102 for (int xOffset = 0; xOffset < 80; xOffset += 16) { 121 for (int xOffset = 0; xOffset < 80; xOffset += 16) {
103 canvas->save(); 122 canvas->save();
104 bounds.fLeft = SkIntToScalar(xOffset); 123 bounds.fLeft = SkIntToScalar(xOffset);
105 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { 124 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) {
106 SkPaint paint; 125 draw_clipped_filter(canvas, filters[i], i, r, bounds);
107 paint.setColor(SK_ColorWHITE);
108 paint.setImageFilter(filters[i]);
109 paint.setAntiAlias(true);
110 canvas->save();
111 canvas->clipRect(bounds);
112 if (5 == i) {
113 canvas->translate(SkIntToScalar(16), SkIntToScalar(-32));
114 } else if (6 == i) {
115 canvas->scale(SkScalarInvert(RESIZE_FACTOR_X),
116 SkScalarInvert(RESIZE_FACTOR_Y));
117 }
118 canvas->drawCircle(r.centerX(), r.centerY(), r.width() * 2 / 5, paint);
119 canvas->restore();
120 canvas->translate(r.width() + margin, 0); 126 canvas->translate(r.width() + margin, 0);
121 } 127 }
122 canvas->restore(); 128 canvas->restore();
123 canvas->translate(0, r.height() + margin); 129 canvas->translate(0, r.height() + margin);
124 } 130 }
131 canvas->restore();
125 132
126 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { 133 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) {
127 SkSafeUnref(filters[i]); 134 SkSafeUnref(filters[i]);
128 } 135 }
136
137 SkImageFilter* rectFilter = SkRectShaderImageFilter::Create(noise);
138 canvas->translate(SK_ARRAY_COUNT(filters)*(r.width() + margin), 0);
139 for (int xOffset = 0; xOffset < 80; xOffset += 16) {
140 bounds.fLeft = SkIntToScalar(xOffset);
141 draw_clipped_filter(canvas, rectFilter, 0, r, bounds);
142 canvas->translate(0, r.height() + margin);
143 }
144 SkSafeUnref(rectFilter);
129 } 145 }
130 146
131 private: 147 private:
132 bool fInitialized; 148 bool fInitialized;
133 SkBitmap fCheckerboard; 149 SkBitmap fCheckerboard;
134 SkBitmap fGradientCircle; 150 SkBitmap fGradientCircle;
135 typedef GM INHERITED; 151 typedef GM INHERITED;
136 }; 152 };
137 153
138 ////////////////////////////////////////////////////////////////////////////// 154 //////////////////////////////////////////////////////////////////////////////
139 155
140 static GM* MyFactory(void*) { return new ImageFiltersClippedGM; } 156 static GM* MyFactory(void*) { return new ImageFiltersClippedGM; }
141 static GMRegistry reg(MyFactory); 157 static GMRegistry reg(MyFactory);
142 158
143 } 159 }
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