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 #include "SampleCode.h" | 7 #include "SampleCode.h" |
8 #include "SkAlphaThresholdFilter.h" | 8 #include "SkAlphaThresholdFilter.h" |
9 #include "SkBitmapSource.h" | 9 #include "SkBitmapSource.h" |
10 #include "SkBlurImageFilter.h" | 10 #include "SkBlurImageFilter.h" |
11 #include "SkCanvas.h" | 11 #include "SkCanvas.h" |
12 #include "SkColorCubeFilter.h" | |
12 #include "SkColorFilter.h" | 13 #include "SkColorFilter.h" |
13 #include "SkColorFilterImageFilter.h" | 14 #include "SkColorFilterImageFilter.h" |
14 #include "SkComposeImageFilter.h" | 15 #include "SkComposeImageFilter.h" |
15 #include "SkData.h" | 16 #include "SkData.h" |
16 #include "SkDisplacementMapEffect.h" | 17 #include "SkDisplacementMapEffect.h" |
17 #include "SkDropShadowImageFilter.h" | 18 #include "SkDropShadowImageFilter.h" |
18 #include "SkFlattenableSerialization.h" | 19 #include "SkFlattenableSerialization.h" |
19 #include "SkLightingImageFilter.h" | 20 #include "SkLightingImageFilter.h" |
20 #include "SkMagnifierImageFilter.h" | 21 #include "SkMagnifierImageFilter.h" |
21 #include "SkMatrixImageFilter.h" | 22 #include "SkMatrixImageFilter.h" |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
203 static SkBitmap bitmap[2]; | 204 static SkBitmap bitmap[2]; |
204 static bool initialized = false; | 205 static bool initialized = false; |
205 if (!initialized) { | 206 if (!initialized) { |
206 make_g_bitmap(bitmap[0]); | 207 make_g_bitmap(bitmap[0]); |
207 make_checkerboard_bitmap(bitmap[1]); | 208 make_checkerboard_bitmap(bitmap[1]); |
208 initialized = true; | 209 initialized = true; |
209 } | 210 } |
210 return bitmap[R(2)]; | 211 return bitmap[R(2)]; |
211 } | 212 } |
212 | 213 |
214 static SkData* make_3Dlut(int* cubeDimension, bool invR, bool invG, bool invB) { | |
215 int size = 4; | |
216 switch (R(5)) { | |
Stephen White
2014/10/24 22:48:37
Nit: couldn't this also be
int size = 4 << R(5) ?
sugoi1
2014/10/27 14:55:32
Done.
| |
217 case 4: | |
218 size *= 2; // 64 | |
219 case 3: | |
220 size *= 2; // 32 | |
221 case 2: | |
222 size *= 2; // 16 | |
223 case 1: | |
224 size *= 2; // 8 | |
225 default: | |
226 break; | |
227 } | |
228 | |
229 SkData* data = SkData::NewUninitialized(sizeof(SkColor) * size * size * size ); | |
Stephen White
2014/10/24 22:48:38
Should we also be trying to give the fuzzer trunca
sugoi1
2014/10/27 14:55:32
Yeah, the fuzzer should take care of that case aut
| |
230 SkColor* pixels = (SkColor*)(data->writable_data()); | |
231 SkAutoMalloc lutMemory(size); | |
232 SkAutoMalloc invLutMemory(size); | |
233 uint8_t* lut = (uint8_t*)lutMemory.get(); | |
234 uint8_t* invLut = (uint8_t*)invLutMemory.get(); | |
235 const int maxIndex = size - 1; | |
236 for (int i = 0; i < size; i++) { | |
237 lut[i] = (i * 255) / maxIndex; | |
238 invLut[i] = ((maxIndex - i) * 255) / maxIndex; | |
239 } | |
240 for (int r = 0; r < size; ++r) { | |
241 for (int g = 0; g < size; ++g) { | |
242 for (int b = 0; b < size; ++b) { | |
243 pixels[(size * ((size * b) + g)) + r] = SkColorSetARGB(0xFF, | |
244 invR ? invLut[r] : lut[r], | |
245 invG ? invLut[g] : lut[g], | |
246 invB ? invLut[b] : lut[b]); | |
247 } | |
248 } | |
249 } | |
250 if (cubeDimension) { | |
251 *cubeDimension = size; | |
252 } | |
253 return data; | |
254 } | |
255 | |
213 static void drawSomething(SkCanvas* canvas) { | 256 static void drawSomething(SkCanvas* canvas) { |
214 SkPaint paint; | 257 SkPaint paint; |
215 | 258 |
216 canvas->save(); | 259 canvas->save(); |
217 canvas->scale(0.5f, 0.5f); | 260 canvas->scale(0.5f, 0.5f); |
218 canvas->drawBitmap(make_bitmap(), 0, 0, NULL); | 261 canvas->drawBitmap(make_bitmap(), 0, 0, NULL); |
219 canvas->restore(); | 262 canvas->restore(); |
220 | 263 |
221 const char beforeStr[] = "before circle"; | 264 const char beforeStr[] = "before circle"; |
222 const char afterStr[] = "after circle"; | 265 const char afterStr[] = "after circle"; |
223 | 266 |
224 paint.setAntiAlias(true); | 267 paint.setAntiAlias(true); |
225 | 268 |
226 paint.setColor(SK_ColorRED); | 269 paint.setColor(SK_ColorRED); |
227 canvas->drawData(beforeStr, sizeof(beforeStr)); | 270 canvas->drawData(beforeStr, sizeof(beforeStr)); |
228 canvas->drawCircle(SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/2 ), SkIntToScalar(kBitmapSize/3), paint); | 271 canvas->drawCircle(SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/2 ), SkIntToScalar(kBitmapSize/3), paint); |
229 canvas->drawData(afterStr, sizeof(afterStr)); | 272 canvas->drawData(afterStr, sizeof(afterStr)); |
230 paint.setColor(SK_ColorBLACK); | 273 paint.setColor(SK_ColorBLACK); |
231 paint.setTextSize(SkIntToScalar(kBitmapSize/3)); | 274 paint.setTextSize(SkIntToScalar(kBitmapSize/3)); |
232 canvas->drawText("Picture", 7, SkIntToScalar(kBitmapSize/2), SkIntToScalar(k BitmapSize/4), paint); | 275 canvas->drawText("Picture", 7, SkIntToScalar(kBitmapSize/2), SkIntToScalar(k BitmapSize/4), paint); |
233 } | 276 } |
234 | 277 |
235 static SkImageFilter* make_image_filter(bool canBeNull = true) { | 278 static SkImageFilter* make_image_filter(bool canBeNull = true) { |
236 SkImageFilter* filter = 0; | 279 SkImageFilter* filter = 0; |
237 | 280 |
238 // Add a 1 in 3 chance to get a NULL input | 281 // Add a 1 in 3 chance to get a NULL input |
239 if (canBeNull && (R(3) == 1)) { return filter; } | 282 if (canBeNull && (R(3) == 1)) { return filter; } |
240 | 283 |
241 enum { ALPHA_THRESHOLD, MERGE, COLOR, BLUR, MAGNIFIER, | 284 enum { ALPHA_THRESHOLD, MERGE, COLOR, LUT3D, BLUR, MAGNIFIER, |
242 DOWN_SAMPLE, XFERMODE, OFFSET, MATRIX, MATRIX_CONVOLUTION, COMPOSE, | 285 DOWN_SAMPLE, XFERMODE, OFFSET, MATRIX, MATRIX_CONVOLUTION, COMPOSE, |
243 DISTANT_LIGHT, POINT_LIGHT, SPOT_LIGHT, NOISE, DROP_SHADOW, | 286 DISTANT_LIGHT, POINT_LIGHT, SPOT_LIGHT, NOISE, DROP_SHADOW, |
244 MORPHOLOGY, BITMAP, DISPLACE, TILE, PICTURE, NUM_FILTERS }; | 287 MORPHOLOGY, BITMAP, DISPLACE, TILE, PICTURE, NUM_FILTERS }; |
245 | 288 |
246 switch (R(NUM_FILTERS)) { | 289 switch (R(NUM_FILTERS)) { |
247 case ALPHA_THRESHOLD: | 290 case ALPHA_THRESHOLD: |
248 filter = SkAlphaThresholdFilter::Create(make_region(), make_scalar(), ma ke_scalar()); | 291 filter = SkAlphaThresholdFilter::Create(make_region(), make_scalar(), ma ke_scalar()); |
249 break; | 292 break; |
250 case MERGE: | 293 case MERGE: |
251 filter = SkMergeImageFilter::Create(make_image_filter(), make_image_filt er(), make_xfermode()); | 294 filter = SkMergeImageFilter::Create(make_image_filter(), make_image_filt er(), make_xfermode()); |
252 break; | 295 break; |
253 case COLOR: | 296 case COLOR: |
254 { | 297 { |
255 SkAutoTUnref<SkColorFilter> cf((R(2) == 1) ? | 298 SkAutoTUnref<SkColorFilter> cf((R(2) == 1) ? |
256 SkColorFilter::CreateModeFilter(make_color(), make_xfermode()) : | 299 SkColorFilter::CreateModeFilter(make_color(), make_xfermode()) : |
257 SkColorFilter::CreateLightingFilter(make_color(), make_color()) ); | 300 SkColorFilter::CreateLightingFilter(make_color(), make_color()) ); |
258 filter = cf.get() ? SkColorFilterImageFilter::Create(cf, make_image_filt er()) : 0; | 301 filter = cf.get() ? SkColorFilterImageFilter::Create(cf, make_image_filt er()) : 0; |
259 } | 302 } |
260 break; | 303 break; |
304 case LUT3D: | |
305 { | |
306 int cubeDimension; | |
307 SkAutoDataUnref lut3D(make_3Dlut(&cubeDimension, (R(2) == 1), (R(2) == 1 ), (R(2) == 1))); | |
308 SkAutoTUnref<SkColorFilter> cf(SkColorCubeFilter::Create(lut3D, cubeDime nsion)); | |
309 filter = cf.get() ? SkColorFilterImageFilter::Create(cf, make_image_filt er()) : 0; | |
310 } | |
311 break; | |
261 case BLUR: | 312 case BLUR: |
262 filter = SkBlurImageFilter::Create(make_scalar(true), make_scalar(true), make_image_filter()); | 313 filter = SkBlurImageFilter::Create(make_scalar(true), make_scalar(true), make_image_filter()); |
263 break; | 314 break; |
264 case MAGNIFIER: | 315 case MAGNIFIER: |
265 filter = SkMagnifierImageFilter::Create(make_rect(), make_scalar(true)); | 316 filter = SkMagnifierImageFilter::Create(make_rect(), make_scalar(true)); |
266 break; | 317 break; |
267 case DOWN_SAMPLE: | 318 case DOWN_SAMPLE: |
268 filter = SkDownSampleImageFilter::Create(make_scalar()); | 319 filter = SkDownSampleImageFilter::Create(make_scalar()); |
269 break; | 320 break; |
270 case XFERMODE: | 321 case XFERMODE: |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
481 } | 532 } |
482 | 533 |
483 private: | 534 private: |
484 typedef SkView INHERITED; | 535 typedef SkView INHERITED; |
485 }; | 536 }; |
486 | 537 |
487 ////////////////////////////////////////////////////////////////////////////// | 538 ////////////////////////////////////////////////////////////////////////////// |
488 | 539 |
489 static SkView* MyFactory() { return new ImageFilterFuzzView; } | 540 static SkView* MyFactory() { return new ImageFilterFuzzView; } |
490 static SkViewRegister reg(MyFactory); | 541 static SkViewRegister reg(MyFactory); |
OLD | NEW |