SkImageShader.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*
  2. * Copyright 2015 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. #ifndef SkImageShader_DEFINED
  8. #define SkImageShader_DEFINED
  9. #include "include/core/SkImage.h"
  10. #include "src/shaders/SkBitmapProcShader.h"
  11. #include "src/shaders/SkShaderBase.h"
  12. class SkImageShader : public SkShaderBase {
  13. public:
  14. static sk_sp<SkShader> Make(sk_sp<SkImage>,
  15. SkTileMode tmx,
  16. SkTileMode tmy,
  17. const SkMatrix* localMatrix,
  18. bool clampAsIfUnpremul = false);
  19. bool isOpaque() const override;
  20. #if SK_SUPPORT_GPU
  21. std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const GrFPArgs&) const override;
  22. #endif
  23. private:
  24. SK_FLATTENABLE_HOOKS(SkImageShader)
  25. SkImageShader(sk_sp<SkImage>,
  26. SkTileMode tmx,
  27. SkTileMode tmy,
  28. const SkMatrix* localMatrix,
  29. bool clampAsIfUnpremul);
  30. void flatten(SkWriteBuffer&) const override;
  31. #ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
  32. Context* onMakeContext(const ContextRec&, SkArenaAlloc* storage) const override;
  33. #endif
  34. SkImage* onIsAImage(SkMatrix*, SkTileMode*) const override;
  35. bool onAppendStages(const SkStageRec&) const override;
  36. sk_sp<SkImage> fImage;
  37. const SkTileMode fTileModeX;
  38. const SkTileMode fTileModeY;
  39. const bool fClampAsIfUnpremul;
  40. friend class SkShaderBase;
  41. typedef SkShaderBase INHERITED;
  42. };
  43. #endif