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 8 #ifndef SkImageShader_DEFINED 9 #define SkImageShader_DEFINED 10 11 #include "include/core/SkImage.h" 12 #include "src/shaders/SkBitmapProcShader.h" 13 #include "src/shaders/SkShaderBase.h" 14 15 // private subclass of SkStageUpdater 16 class SkImageStageUpdater; 17 18 class SkImageShader : public SkShaderBase { 19 public: 20 static sk_sp<SkShader> Make(sk_sp<SkImage>, 21 SkTileMode tmx, 22 SkTileMode tmy, 23 const SkMatrix* localMatrix, 24 bool clampAsIfUnpremul = false); 25 26 bool isOpaque() const override; 27 28 #if SK_SUPPORT_GPU 29 std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const GrFPArgs&) const override; 30 #endif 31 32 private: 33 SK_FLATTENABLE_HOOKS(SkImageShader) 34 35 SkImageShader(sk_sp<SkImage>, 36 SkTileMode tmx, 37 SkTileMode tmy, 38 const SkMatrix* localMatrix, 39 bool clampAsIfUnpremul); 40 41 void flatten(SkWriteBuffer&) const override; 42 #ifdef SK_ENABLE_LEGACY_SHADERCONTEXT 43 Context* onMakeContext(const ContextRec&, SkArenaAlloc* storage) const override; 44 #endif 45 SkImage* onIsAImage(SkMatrix*, SkTileMode*) const override; 46 47 bool onAppendStages(const SkStageRec&) const override; 48 SkStageUpdater* onAppendUpdatableStages(const SkStageRec&) const override; 49 50 bool doStages(const SkStageRec&, SkImageStageUpdater* = nullptr) const; 51 52 sk_sp<SkImage> fImage; 53 const SkTileMode fTileModeX; 54 const SkTileMode fTileModeY; 55 const bool fClampAsIfUnpremul; 56 57 friend class SkShaderBase; 58 typedef SkShaderBase INHERITED; 59 }; 60 61 #endif 62