1 /* 2 * Copyright 2012 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 GrSingleTextureEffect_DEFINED 9 #define GrSingleTextureEffect_DEFINED 10 11 #include "GrFragmentProcessor.h" 12 #include "GrCoordTransform.h" 13 #include "GrInvariantOutput.h" 14 #include "SkMatrix.h" 15 16 class GrTexture; 17 18 /** 19 * A base class for effects that draw a single texture with a texture matrix. This effect has no 20 * backend implementations. One must be provided by the subclass. 21 */ 22 class GrSingleTextureEffect : public GrFragmentProcessor { 23 public: 24 virtual ~GrSingleTextureEffect(); 25 26 protected: 27 /** unfiltered, clamp mode */ 28 GrSingleTextureEffect(GrTexture*, const SkMatrix&, GrCoordSet = kLocal_GrCoordSet); 29 /** clamp mode */ 30 GrSingleTextureEffect(GrTexture*, const SkMatrix&, GrTextureParams::FilterMode filterMode, 31 GrCoordSet = kLocal_GrCoordSet); 32 GrSingleTextureEffect(GrTexture*, 33 const SkMatrix&, 34 const GrTextureParams&, 35 GrCoordSet = kLocal_GrCoordSet); 36 37 /** 38 * Can be used as a helper to implement subclass onComputeInvariantOutput(). It assumes that 39 * the subclass output color will be a modulation of the input color with a value read from the 40 * texture. 41 */ updateInvariantOutputForModulation(GrInvariantOutput * inout)42 void updateInvariantOutputForModulation(GrInvariantOutput* inout) const { 43 if (GrPixelConfigIsAlphaOnly(this->texture(0)->config())) { 44 inout->mulByUnknownSingleComponent(); 45 } else if (GrPixelConfigIsOpaque(this->texture(0)->config())) { 46 inout->mulByUnknownOpaqueFourComponents(); 47 } else { 48 inout->mulByUnknownFourComponents(); 49 } 50 } 51 52 private: 53 GrCoordTransform fCoordTransform; 54 GrTextureAccess fTextureAccess; 55 56 typedef GrFragmentProcessor INHERITED; 57 }; 58 59 #endif 60