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 "SkBicubicImageFilter.h" | 8 #include "SkBicubicImageFilter.h" |
9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" |
10 #include "SkBitmapDevice.h" | 10 #include "SkBitmapDevice.h" |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 SkAutoTUnref<SkImageFilter> gradient_source(SkBitmapSource::Create(make_grad
ient_circle(64, 64))); | 302 SkAutoTUnref<SkImageFilter> gradient_source(SkBitmapSource::Create(make_grad
ient_circle(64, 64))); |
303 | 303 |
304 struct { | 304 struct { |
305 const char* fName; | 305 const char* fName; |
306 SkImageFilter* fFilter; | 306 SkImageFilter* fFilter; |
307 } filters[] = { | 307 } filters[] = { |
308 { "color filter", SkColorFilterImageFilter::Create(cf.get()) }, | 308 { "color filter", SkColorFilterImageFilter::Create(cf.get()) }, |
309 { "displacement map", SkDisplacementMapEffect::Create( | 309 { "displacement map", SkDisplacementMapEffect::Create( |
310 SkDisplacementMapEffect::kR_ChannelSelectorType, | 310 SkDisplacementMapEffect::kR_ChannelSelectorType, |
311 SkDisplacementMapEffect::kB_ChannelSelectorType, | 311 SkDisplacementMapEffect::kB_ChannelSelectorType, |
312 40.0f, gradient_source.get()) }, | 312 20.0f, gradient_source.get()) }, |
313 { "blur", SkBlurImageFilter::Create(SK_Scalar1, SK_Scalar1) }, | 313 { "blur", SkBlurImageFilter::Create(SK_Scalar1, SK_Scalar1) }, |
314 { "drop shadow", SkDropShadowImageFilter::Create( | 314 { "drop shadow", SkDropShadowImageFilter::Create( |
315 SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN) }, | 315 SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN) }, |
316 { "diffuse lighting", SkLightingImageFilter::CreatePointLitDiffuse( | 316 { "diffuse lighting", SkLightingImageFilter::CreatePointLitDiffuse( |
317 location, SK_ColorGREEN, 0, 0) }, | 317 location, SK_ColorGREEN, 0, 0) }, |
318 { "specular lighting", | 318 { "specular lighting", |
319 SkLightingImageFilter::CreatePointLitSpecular(location, SK_ColorGR
EEN, 0, 0, 0) }, | 319 SkLightingImageFilter::CreatePointLitSpecular(location, SK_ColorGR
EEN, 0, 0, 0) }, |
320 { "matrix convolution", | 320 { "matrix convolution", |
321 SkMatrixConvolutionImageFilter::Create( | 321 SkMatrixConvolutionImageFilter::Create( |
322 kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1), | 322 kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1), |
323 SkMatrixConvolutionImageFilter::kRepeat_TileMode, false) }, | 323 SkMatrixConvolutionImageFilter::kRepeat_TileMode, false) }, |
324 { "merge", SkMergeImageFilter::Create(NULL, NULL, SkXfermode::kSrcOver_M
ode) }, | 324 { "merge", SkMergeImageFilter::Create(NULL, NULL, SkXfermode::kSrcOver_M
ode) }, |
325 { "offset", SkOffsetImageFilter::Create(SK_Scalar1, SK_Scalar1) }, | 325 { "offset", SkOffsetImageFilter::Create(SK_Scalar1, SK_Scalar1) }, |
326 { "dilate", SkDilateImageFilter::Create(3, 2) }, | 326 { "dilate", SkDilateImageFilter::Create(3, 2) }, |
327 { "erode", SkErodeImageFilter::Create(2, 3) }, | 327 { "erode", SkErodeImageFilter::Create(2, 3) }, |
328 { "tile", SkTileImageFilter::Create(SkRect::MakeXYWH(0, 0, 50, 50), | 328 { "tile", SkTileImageFilter::Create(SkRect::MakeXYWH(0, 0, 50, 50), |
329 SkRect::MakeXYWH(0, 0, 100, 100), NU
LL) }, | 329 SkRect::MakeXYWH(0, 0, 100, 100), NU
LL) }, |
330 }; | 330 }; |
331 | 331 |
332 SkBitmap untiledResult, tiledResult; | 332 SkBitmap untiledResult, tiledResult; |
333 int width = 64, height = 64; | 333 int width = 64, height = 64; |
334 untiledResult.allocN32Pixels(width, height); | 334 untiledResult.allocN32Pixels(width, height); |
335 tiledResult.allocN32Pixels(width, height); | 335 tiledResult.allocN32Pixels(width, height); |
336 SkCanvas tiledCanvas(tiledResult); | 336 SkCanvas tiledCanvas(tiledResult); |
337 SkCanvas untiledCanvas(untiledResult); | 337 SkCanvas untiledCanvas(untiledResult); |
338 tiledCanvas.clear(0); | 338 int tileSize = 8; |
339 untiledCanvas.clear(0); | |
340 int tileSize = 16; | |
341 | 339 |
342 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { | 340 for (int scale = 1; scale <= 2; ++scale) { |
343 SkPaint paint; | 341 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { |
344 paint.setImageFilter(filters[i].fFilter); | 342 tiledCanvas.clear(0); |
345 paint.setTextSize(SkIntToScalar(height)); | 343 untiledCanvas.clear(0); |
346 paint.setColor(SK_ColorWHITE); | 344 SkPaint paint; |
347 SkString str; | 345 paint.setImageFilter(filters[i].fFilter); |
348 const char* text = "ABC"; | 346 paint.setTextSize(SkIntToScalar(height)); |
349 SkScalar ypos = SkIntToScalar(height); | 347 paint.setColor(SK_ColorWHITE); |
350 untiledCanvas.drawText(text, strlen(text), 0, ypos, paint); | 348 SkString str; |
351 for (int y = 0; y < height; y += tileSize) { | 349 const char* text = "ABC"; |
352 for (int x = 0; x < width; x += tileSize) { | 350 SkScalar ypos = SkIntToScalar(height); |
353 tiledCanvas.save(); | 351 untiledCanvas.save(); |
354 tiledCanvas.clipRect(SkRect::Make(SkIRect::MakeXYWH(x, y, tileSi
ze, tileSize))); | 352 untiledCanvas.scale(SkIntToScalar(scale), SkIntToScalar(scale)); |
355 tiledCanvas.drawText(text, strlen(text), 0, ypos, paint); | 353 untiledCanvas.drawText(text, strlen(text), 0, ypos, paint); |
356 tiledCanvas.restore(); | 354 untiledCanvas.restore(); |
| 355 for (int y = 0; y < height; y += tileSize) { |
| 356 for (int x = 0; x < width; x += tileSize) { |
| 357 tiledCanvas.save(); |
| 358 tiledCanvas.clipRect(SkRect::Make(SkIRect::MakeXYWH(x, y, ti
leSize, tileSize))); |
| 359 tiledCanvas.scale(SkIntToScalar(scale), SkIntToScalar(scale)
); |
| 360 tiledCanvas.drawText(text, strlen(text), 0, ypos, paint); |
| 361 tiledCanvas.restore(); |
| 362 } |
357 } | 363 } |
358 } | 364 untiledCanvas.flush(); |
359 untiledCanvas.flush(); | 365 tiledCanvas.flush(); |
360 tiledCanvas.flush(); | 366 for (int y = 0; y < height; y++) { |
361 for (int y = 0; y < height; y++) { | 367 int diffs = memcmp(untiledResult.getAddr32(0, y), tiledResult.ge
tAddr32(0, y), untiledResult.rowBytes()); |
362 int diffs = memcmp(untiledResult.getAddr32(0, y), tiledResult.getAdd
r32(0, y), untiledResult.rowBytes()); | 368 REPORTER_ASSERT_MESSAGE(reporter, !diffs, filters[i].fName); |
363 REPORTER_ASSERT_MESSAGE(reporter, !diffs, filters[i].fName); | 369 if (diffs) { |
364 if (diffs) { | 370 break; |
365 break; | 371 } |
366 } | 372 } |
367 } | 373 } |
368 } | 374 } |
369 | 375 |
370 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { | 376 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { |
371 SkSafeUnref(filters[i].fFilter); | 377 SkSafeUnref(filters[i].fFilter); |
372 } | 378 } |
373 } | 379 } |
374 | 380 |
375 DEF_TEST(ImageFilterMatrixConvolution, reporter) { | 381 DEF_TEST(ImageFilterMatrixConvolution, reporter) { |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
666 } | 672 } |
667 | 673 |
668 DEF_GPUTEST(XfermodeImageFilterCroppedInputGPU, reporter, factory) { | 674 DEF_GPUTEST(XfermodeImageFilterCroppedInputGPU, reporter, factory) { |
669 GrContext* context = factory->get(static_cast<GrContextFactory::GLContextTyp
e>(0)); | 675 GrContext* context = factory->get(static_cast<GrContextFactory::GLContextTyp
e>(0)); |
670 SkAutoTUnref<SkGpuDevice> device(SkGpuDevice::Create(context, | 676 SkAutoTUnref<SkGpuDevice> device(SkGpuDevice::Create(context, |
671 SkImageInfo::MakeN32Pre
mul(1, 1), | 677 SkImageInfo::MakeN32Pre
mul(1, 1), |
672 0)); | 678 0)); |
673 test_xfermode_cropped_input(device, reporter); | 679 test_xfermode_cropped_input(device, reporter); |
674 } | 680 } |
675 #endif | 681 #endif |
OLD | NEW |