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