| 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 |