| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 #ifndef GrSingleTextureEffect_DEFINED | 8 #ifndef GrSingleTextureEffect_DEFINED |
| 9 #define GrSingleTextureEffect_DEFINED | 9 #define GrSingleTextureEffect_DEFINED |
| 10 | 10 |
| 11 #include "GrFragmentProcessor.h" | 11 #include "GrFragmentProcessor.h" |
| 12 #include "GrColorSpaceXform.h" | 12 #include "GrColorSpaceXform.h" |
| 13 #include "GrCoordTransform.h" | 13 #include "GrCoordTransform.h" |
| 14 #include "GrInvariantOutput.h" | 14 #include "GrInvariantOutput.h" |
| 15 #include "SkMatrix.h" | 15 #include "SkMatrix.h" |
| 16 | 16 |
| 17 class GrTexture; | 17 class GrTexture; |
| 18 class GrTextureProxy; |
| 18 | 19 |
| 19 /** | 20 /** |
| 20 * A base class for effects that draw a single texture with a texture matrix. Th
is effect has no | 21 * A base class for effects that draw a single texture with a texture matrix. Th
is effect has no |
| 21 * backend implementations. One must be provided by the subclass. | 22 * backend implementations. One must be provided by the subclass. |
| 22 */ | 23 */ |
| 23 class GrSingleTextureEffect : public GrFragmentProcessor { | 24 class GrSingleTextureEffect : public GrFragmentProcessor { |
| 24 public: | 25 public: |
| 25 ~GrSingleTextureEffect() override; | 26 ~GrSingleTextureEffect() override; |
| 26 | 27 |
| 27 SkString dumpInfo() const override { | 28 SkString dumpInfo() const override { |
| 28 SkString str; | 29 SkString str; |
| 29 str.appendf("Texture: %d", fTextureAccess.getTexture()->uniqueID()); | 30 str.appendf("Texture: %d", fTextureAccess.getTexture()->uniqueID()); |
| 30 return str; | 31 return str; |
| 31 } | 32 } |
| 32 | 33 |
| 33 GrColorSpaceXform* colorSpaceXform() const { return fColorSpaceXform.get();
} | 34 GrColorSpaceXform* colorSpaceXform() const { return fColorSpaceXform.get();
} |
| 34 | 35 |
| 35 protected: | 36 protected: |
| 36 /** unfiltered, clamp mode */ | 37 /** unfiltered, clamp mode */ |
| 37 GrSingleTextureEffect(GrTexture*, sk_sp<GrColorSpaceXform>, const SkMatrix&)
; | 38 GrSingleTextureEffect(GrTexture*, sk_sp<GrColorSpaceXform>, const SkMatrix&)
; |
| 38 /** clamp mode */ | 39 /** clamp mode */ |
| 39 GrSingleTextureEffect(GrTexture*, sk_sp<GrColorSpaceXform>, const SkMatrix&, | 40 GrSingleTextureEffect(GrTexture*, sk_sp<GrColorSpaceXform>, const SkMatrix&, |
| 40 GrTextureParams::FilterMode filterMode); | 41 GrTextureParams::FilterMode filterMode); |
| 41 GrSingleTextureEffect(GrTexture*, | 42 GrSingleTextureEffect(GrTexture*, |
| 42 sk_sp<GrColorSpaceXform>, | 43 sk_sp<GrColorSpaceXform>, |
| 43 const SkMatrix&, | 44 const SkMatrix&, |
| 44 const GrTextureParams&); | 45 const GrTextureParams&); |
| 45 | 46 |
| 47 /** unfiltered, clamp mode */ |
| 48 GrSingleTextureEffect(GrTextureProxy*, sk_sp<GrColorSpaceXform>, const SkMat
rix&); |
| 49 /** clamp mode */ |
| 50 GrSingleTextureEffect(GrTextureProxy*, sk_sp<GrColorSpaceXform>, const SkMat
rix&, |
| 51 GrTextureParams::FilterMode filterMode); |
| 52 GrSingleTextureEffect(GrTextureProxy*, |
| 53 sk_sp<GrColorSpaceXform>, |
| 54 const SkMatrix&, |
| 55 const GrTextureParams&); |
| 56 |
| 46 /** | 57 /** |
| 47 * Can be used as a helper to implement subclass onComputeInvariantOutput().
It assumes that | 58 * Can be used as a helper to implement subclass onComputeInvariantOutput().
It assumes that |
| 48 * the subclass output color will be a modulation of the input color with a
value read from the | 59 * the subclass output color will be a modulation of the input color with a
value read from the |
| 49 * texture. | 60 * texture. |
| 50 */ | 61 */ |
| 51 void updateInvariantOutputForModulation(GrInvariantOutput* inout) const { | 62 void updateInvariantOutputForModulation(GrInvariantOutput* inout) const { |
| 52 if (GrPixelConfigIsAlphaOnly(this->texture(0)->config())) { | 63 if (GrPixelConfigIsAlphaOnly(this->texture(0)->config())) { |
| 53 inout->mulByUnknownSingleComponent(); | 64 inout->mulByUnknownSingleComponent(); |
| 54 } else if (GrPixelConfigIsOpaque(this->texture(0)->config())) { | 65 } else if (GrPixelConfigIsOpaque(this->texture(0)->config())) { |
| 55 inout->mulByUnknownOpaqueFourComponents(); | 66 inout->mulByUnknownOpaqueFourComponents(); |
| 56 } else { | 67 } else { |
| 57 inout->mulByUnknownFourComponents(); | 68 inout->mulByUnknownFourComponents(); |
| 58 } | 69 } |
| 59 } | 70 } |
| 60 | 71 |
| 61 private: | 72 private: |
| 62 GrCoordTransform fCoordTransform; | 73 GrCoordTransform fCoordTransform; |
| 63 GrTextureAccess fTextureAccess; | 74 GrTextureAccess fTextureAccess; |
| 64 sk_sp<GrColorSpaceXform> fColorSpaceXform; | 75 sk_sp<GrColorSpaceXform> fColorSpaceXform; |
| 65 | 76 |
| 66 typedef GrFragmentProcessor INHERITED; | 77 typedef GrFragmentProcessor INHERITED; |
| 67 }; | 78 }; |
| 68 | 79 |
| 69 #endif | 80 #endif |
| OLD | NEW |