OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 "gm.h" | 8 #include "gm.h" |
9 #include "SkBlurMask.h" | 9 #include "SkBlurMask.h" |
10 #include "SkBlurMaskFilter.h" | 10 #include "SkBlurMaskFilter.h" |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 if (doClip) { | 132 if (doClip) { |
133 canvas->restore(); | 133 canvas->restore(); |
134 } | 134 } |
135 canvas->translate(0, r.height() * 4/3); | 135 canvas->translate(0, r.height() * 4/3); |
136 } | 136 } |
137 } | 137 } |
138 private: | 138 private: |
139 typedef GM INHERITED; | 139 typedef GM INHERITED; |
140 }; | 140 }; |
141 | 141 |
| 142 |
| 143 class BlurRectDirectGM : public skiagm::GM { |
| 144 SkString fName; |
| 145 int fGMWidth, fGMHeight; |
| 146 int fPadding, fMargin; |
| 147 public: |
| 148 BlurRectDirectGM(const char name[]) |
| 149 : fName(name), |
| 150 fGMWidth(1200), |
| 151 fGMHeight(1024), |
| 152 fPadding(10), |
| 153 fMargin(100) |
| 154 { |
| 155 } |
| 156 |
| 157 protected: |
| 158 virtual SkString onShortName() { |
| 159 return fName; |
| 160 } |
| 161 |
| 162 virtual SkISize onISize() { |
| 163 return SkISize::Make(fGMWidth, fGMHeight); |
| 164 } |
| 165 |
| 166 virtual void onDraw(SkCanvas* canvas) { |
| 167 const int widths[] = {25, 5, 5, 100, 150, 25}; |
| 168 const int heights[] = {100, 100, 5, 25, 150, 25}; |
| 169 const SkBlurStyle styles[] = {kNormal_SkBlurStyle, kInner_SkBlurStyle, k
Outer_SkBlurStyle}; |
| 170 const float radii[] = {20, 5, 10}; |
| 171 |
| 172 canvas->translate(50,20); |
| 173 |
| 174 int cur_x = 0; |
| 175 int cur_y = 0; |
| 176 |
| 177 int max_height = 0; |
| 178 |
| 179 for (size_t i = 0 ; i < SK_ARRAY_COUNT(widths) ; i++) { |
| 180 int width = widths[i]; |
| 181 int height = heights[i]; |
| 182 SkRect r; |
| 183 r.setWH(SkIntToScalar(width), SkIntToScalar(height)); |
| 184 SkAutoCanvasRestore autoRestore(canvas, true); |
| 185 |
| 186 for (size_t j = 0 ; j < SK_ARRAY_COUNT(radii) ; j++) { |
| 187 float radius = radii[j]; |
| 188 for (size_t k = 0 ; k < SK_ARRAY_COUNT(styles) ; k++) { |
| 189 SkBlurStyle style = styles[k]; |
| 190 |
| 191 SkMask mask; |
| 192 SkBlurMask::BlurRect(SkBlurMask::ConvertRadiusToSigma(radius
), &mask, r, style); |
| 193 |
| 194 SkAutoMaskFreeImage amfi(mask.fImage); |
| 195 |
| 196 SkBitmap bm; |
| 197 bm.installMaskPixels(mask); |
| 198 |
| 199 if (cur_x + bm.width() >= fGMWidth - fMargin) { |
| 200 cur_x = 0; |
| 201 cur_y += max_height + fPadding; |
| 202 max_height = 0; |
| 203 } |
| 204 |
| 205 canvas->save(); |
| 206 canvas->translate(cur_x, cur_y); |
| 207 canvas->translate(-(bm.width() - r.width())/2, -(bm.height()
-r.height())/2); |
| 208 canvas->drawBitmap(bm, 0.f, 0.f, NULL); |
| 209 canvas->restore(); |
| 210 |
| 211 cur_x += bm.width() + fPadding; |
| 212 if (bm.height() > max_height) |
| 213 max_height = bm.height(); |
| 214 } |
| 215 } |
| 216 } |
| 217 } |
| 218 |
| 219 virtual uint32_t onGetFlags() const { return kSkipPipe_Flag; } |
| 220 |
| 221 private: |
| 222 typedef GM INHERITED; |
| 223 }; |
| 224 |
142 class BlurRectCompareGM : public skiagm::GM { | 225 class BlurRectCompareGM : public skiagm::GM { |
143 SkString fName; | 226 SkString fName; |
144 unsigned int fRectWidth, fRectHeight; | 227 unsigned int fRectWidth, fRectHeight; |
145 SkScalar fRadius; | 228 SkScalar fRadius; |
146 SkBlurStyle fStyle; | 229 SkBlurStyle fStyle; |
147 public: | 230 public: |
148 BlurRectCompareGM(const char name[], unsigned int rectWidth, | 231 BlurRectCompareGM(const char name[], unsigned int rectWidth, |
149 unsigned int rectHeight, float radius, | 232 unsigned int rectHeight, float radius, |
150 SkBlurStyle style) | 233 SkBlurStyle style) |
151 : fName(name) | 234 : fName(name) |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 return kHigh_SkBlurQuality; | 384 return kHigh_SkBlurQuality; |
302 } | 385 } |
303 private: | 386 private: |
304 typedef BlurRectCompareGM INHERITED; | 387 typedef BlurRectCompareGM INHERITED; |
305 }; | 388 }; |
306 | 389 |
307 | 390 |
308 ////////////////////////////////////////////////////////////////////////////// | 391 ////////////////////////////////////////////////////////////////////////////// |
309 | 392 |
310 DEF_GM(return new BlurRectGM("blurrects", 0xFF);) | 393 DEF_GM(return new BlurRectGM("blurrects", 0xFF);) |
311 | 394 DEF_GM(return new BlurRectDirectGM("blurrect_gallery");) |
312 static const SkScalar kBig = 20; | |
313 static const SkScalar kSmall = 2; | |
314 | |
315 // regular size rects, blurs should be small enough not to completely overlap. | |
316 | |
317 DEF_GM(return new BlurRectFastGM( "blurrect_25_100_2_normal_fast", 25, 100, kSma
ll, kNormal_SkBlurStyle);) | |
318 DEF_GM(return new BlurRectFastGM("blurrect_25_100_20_normal_fast", 25, 100, kBig
, kNormal_SkBlurStyle);) | |
319 DEF_GM(return new BlurRectSlowGM( "blurrect_25_100_2_normal_slow", 25, 100, kSma
ll, kNormal_SkBlurStyle);) | |
320 DEF_GM(return new BlurRectSlowGM("blurrect_25_100_20_normal_slow", 25, 100, kBig
, kNormal_SkBlurStyle);) | |
321 DEF_GM(return new BlurRectFastGM( "blurrect_25_100_2_inner_fast", 25, 100, kSmal
l, kInner_SkBlurStyle);) | |
322 DEF_GM(return new BlurRectFastGM("blurrect_25_100_20_inner_fast", 25, 100, kBig,
kInner_SkBlurStyle);) | |
323 DEF_GM(return new BlurRectSlowGM( "blurrect_25_100_2_inner_slow", 25, 100, kSmal
l, kInner_SkBlurStyle);) | |
324 DEF_GM(return new BlurRectSlowGM("blurrect_25_100_20_inner_slow", 25, 100, kBig,
kInner_SkBlurStyle);) | |
325 DEF_GM(return new BlurRectFastGM( "blurrect_25_100_2_outer_fast", 25, 100, kSmal
l, kOuter_SkBlurStyle);) | |
326 DEF_GM(return new BlurRectFastGM("blurrect_25_100_20_outer_fast", 25, 100, kBig,
kOuter_SkBlurStyle);) | |
327 DEF_GM(return new BlurRectSlowGM( "blurrect_25_100_2_outer_slow", 25, 100, kSmal
l, kOuter_SkBlurStyle);) | |
328 DEF_GM(return new BlurRectSlowGM("blurrect_25_100_20_outer_slow", 25, 100, kBig,
kOuter_SkBlurStyle);) | |
329 | |
330 // skinny tall rects, blurs overlap in X but not y | |
331 | |
332 DEF_GM(return new BlurRectFastGM( "blurrect_5_100_2_normal_fast", 5, 100, kSmall
, kNormal_SkBlurStyle);) | |
333 DEF_GM(return new BlurRectFastGM("blurrect_5_100_20_normal_fast", 5, 100, kBig,
kNormal_SkBlurStyle);) | |
334 DEF_GM(return new BlurRectSlowGM( "blurrect_5_100_2_normal_slow", 5, 100, kSmall
, kNormal_SkBlurStyle);) | |
335 DEF_GM(return new BlurRectSlowGM("blurrect_5_100_20_normal_slow", 5, 100, kBig,
kNormal_SkBlurStyle);) | |
336 DEF_GM(return new BlurRectFastGM( "blurrect_5_100_2_inner_fast", 5, 100, kSmall,
kInner_SkBlurStyle);) | |
337 DEF_GM(return new BlurRectFastGM("blurrect_5_100_20_inner_fast", 5, 100, kBig, k
Inner_SkBlurStyle);) | |
338 DEF_GM(return new BlurRectSlowGM( "blurrect_5_100_2_inner_slow", 5, 100, kSmall,
kInner_SkBlurStyle);) | |
339 DEF_GM(return new BlurRectSlowGM("blurrect_5_100_20_inner_slow", 5, 100, kBig, k
Inner_SkBlurStyle);) | |
340 DEF_GM(return new BlurRectFastGM( "blurrect_5_100_2_outer_fast", 5, 100, kSmall,
kOuter_SkBlurStyle);) | |
341 DEF_GM(return new BlurRectFastGM("blurrect_5_100_20_outer_fast", 5, 100, kBig, k
Outer_SkBlurStyle);) | |
342 DEF_GM(return new BlurRectSlowGM( "blurrect_5_100_2_outer_slow", 5, 100, kSmall,
kOuter_SkBlurStyle);) | |
343 DEF_GM(return new BlurRectSlowGM("blurrect_5_100_20_outer_slow", 5, 100, kBig, k
Outer_SkBlurStyle);) | |
344 | |
345 // tiny rects, blurs overlap in X and Y | |
346 | |
347 DEF_GM(return new BlurRectFastGM( "blurrect_5_5_2_normal_fast", 5, 5, kSmall, kN
ormal_SkBlurStyle);) | |
348 DEF_GM(return new BlurRectFastGM("blurrect_5_5_20_normal_fast", 5, 5, kBig, kNor
mal_SkBlurStyle);) | |
349 DEF_GM(return new BlurRectSlowGM( "blurrect_5_5_2_normal_slow", 5, 5, kSmall, kN
ormal_SkBlurStyle);) | |
350 DEF_GM(return new BlurRectSlowGM("blurrect_5_5_20_normal_slow", 5, 5, kBig, kNor
mal_SkBlurStyle);) | |
351 DEF_GM(return new BlurRectFastGM( "blurrect_5_5_2_inner_fast", 5, 5, kSmall, kIn
ner_SkBlurStyle);) | |
352 DEF_GM(return new BlurRectFastGM("blurrect_5_5_20_inner_fast", 5, 5, kBig, kInne
r_SkBlurStyle);) | |
353 DEF_GM(return new BlurRectSlowGM( "blurrect_5_5_2_inner_slow", 5, 5, kSmall, kIn
ner_SkBlurStyle);) | |
354 DEF_GM(return new BlurRectSlowGM("blurrect_5_5_20_inner_slow", 5, 5, kBig, kInne
r_SkBlurStyle);) | |
355 DEF_GM(return new BlurRectFastGM( "blurrect_5_5_2_outer_fast", 5, 5, kSmall, kOu
ter_SkBlurStyle);) | |
356 DEF_GM(return new BlurRectFastGM("blurrect_5_5_20_outer_fast", 5, 5, kBig, kOute
r_SkBlurStyle);) | |
357 DEF_GM(return new BlurRectSlowGM( "blurrect_5_5_2_outer_slow", 5, 5, kSmall, kOu
ter_SkBlurStyle);) | |
358 DEF_GM(return new BlurRectSlowGM("blurrect_5_5_20_outer_slow", 5, 5, kBig, kOute
r_SkBlurStyle);) | |
359 | |
360 | |
361 #if 0 | |
362 // dont' need to GM the gaussian convolution; it's slow and intended | |
363 // as a ground truth comparison only. Leaving these here in case we | |
364 // ever want to turn these back on for debugging reasons. | |
365 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_1_simple", 25, 100, 1)
;) | |
366 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_2_simple", 25, 100, 2)
;) | |
367 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_3_simple", 25, 100, 3)
;) | |
368 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_4_simple", 25, 100, 4)
;) | |
369 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_5_simple", 25, 100, 5)
;) | |
370 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_6_simple", 25, 100, 6)
;) | |
371 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_7_simple", 25, 100, 7)
;) | |
372 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_8_simple", 25, 100, 8)
;) | |
373 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_9_simple", 25, 100, 9)
;) | |
374 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_10_simple", 25, 100, 10
);) | |
375 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_11_simple", 25, 100, 11
);) | |
376 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_12_simple", 25, 100, 12
);) | |
377 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_13_simple", 25, 100, 13
);) | |
378 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_14_simple", 25, 100, 14
);) | |
379 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_15_simple", 25, 100, 15
);) | |
380 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_16_simple", 25, 100, 16
);) | |
381 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_17_simple", 25, 100, 17
);) | |
382 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_18_simple", 25, 100, 18
);) | |
383 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_19_simple", 25, 100, 19
);) | |
384 #endif | |
OLD | NEW |