ShaderTest.cpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*
  2. * Copyright 2016 Google Inc.
  3. *
  4. * Use of this source code is governed by a BSD-style license that can be
  5. * found in the LICENSE file.
  6. */
  7. #include "include/core/SkBitmap.h"
  8. #include "include/core/SkCanvas.h"
  9. #include "include/core/SkData.h"
  10. #include "include/core/SkImage.h"
  11. #include "include/core/SkRRect.h"
  12. #include "include/core/SkShader.h"
  13. #include "include/core/SkSurface.h"
  14. #include "include/effects/SkPerlinNoiseShader.h"
  15. #include "tests/Test.h"
  16. static void check_isaimage(skiatest::Reporter* reporter, SkShader* shader,
  17. int expectedW, int expectedH,
  18. SkTileMode expectedX, SkTileMode expectedY,
  19. const SkMatrix& expectedM) {
  20. SkTileMode tileModes[2];
  21. SkMatrix localM;
  22. // wack these so we don't get a false positive
  23. localM.setScale(9999, -9999);
  24. tileModes[0] = tileModes[1] = (SkTileMode)99;
  25. SkImage* image = shader->isAImage(&localM, tileModes);
  26. REPORTER_ASSERT(reporter, image);
  27. REPORTER_ASSERT(reporter, image->width() == expectedW);
  28. REPORTER_ASSERT(reporter, image->height() == expectedH);
  29. REPORTER_ASSERT(reporter, localM == expectedM);
  30. REPORTER_ASSERT(reporter, tileModes[0] == expectedX);
  31. REPORTER_ASSERT(reporter, tileModes[1] == expectedY);
  32. }
  33. DEF_TEST(Shader_isAImage, reporter) {
  34. const int W = 100;
  35. const int H = 100;
  36. SkBitmap bm;
  37. bm.allocN32Pixels(W, H);
  38. auto img = SkImage::MakeFromBitmap(bm);
  39. const SkMatrix localM = SkMatrix::MakeScale(2, 3);
  40. const SkTileMode tmx = SkTileMode::kRepeat;
  41. const SkTileMode tmy = SkTileMode::kMirror;
  42. auto shader0 = bm.makeShader(tmx, tmy, &localM);
  43. auto shader1 = SkImage::MakeFromBitmap(bm)->makeShader(tmx, tmy, &localM);
  44. check_isaimage(reporter, shader0.get(), W, H, tmx, tmy, localM);
  45. check_isaimage(reporter, shader1.get(), W, H, tmx, tmy, localM);
  46. }
  47. // Make sure things are ok with just a single leg.
  48. DEF_TEST(ComposeShaderSingle, reporter) {
  49. SkBitmap srcBitmap;
  50. srcBitmap.allocN32Pixels(10, 10);
  51. srcBitmap.eraseColor(SK_ColorRED);
  52. SkCanvas canvas(srcBitmap);
  53. SkPaint p;
  54. p.setShader(
  55. SkShaders::Blend(SkBlendMode::kClear,
  56. SkShaders::Empty(),
  57. SkPerlinNoiseShader::MakeFractalNoise(1.0f, 1.0f, 2, 0.0f)));
  58. SkRRect rr;
  59. SkVector rd[] = {{0, 0}, {0, 0}, {0, 0}, {0, 0}};
  60. rr.setRectRadii({0, 0, 0, 0}, rd);
  61. canvas.drawRRect(rr, p);
  62. }