1 /* 2 * Copyright 2013 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 GrSimpleTextureEffect_DEFINED 9 #define GrSimpleTextureEffect_DEFINED 10 11 #include "GrSingleTextureEffect.h" 12 13 class GrGLSimpleTextureEffect; 14 15 /** 16 * The output color of this effect is a modulation of the input color and a sample from a texture. 17 * It allows explicit specification of the filtering and wrap modes (GrTextureParams). It can use 18 * local coords, positions, or a custom vertex attribute as input texture coords. The input coords 19 * can have a matrix applied in the VS in both the local and position cases but not with a custom 20 * attribute coords at this time. It will add a varying to input interpolate texture coords to the 21 * FS. 22 */ 23 class GrSimpleTextureEffect : public GrSingleTextureEffect { 24 public: 25 /* unfiltered, clamp mode */ 26 static GrEffectRef* Create(GrTexture* tex, 27 const SkMatrix& matrix, 28 GrCoordSet coordSet = kLocal_GrCoordSet) { 29 AutoEffectUnref effect(SkNEW_ARGS(GrSimpleTextureEffect, (tex, matrix, GrTextureParams::kNone_FilterMode, coordSet))); 30 return CreateEffectRef(effect); 31 } 32 33 /* clamp mode */ 34 static GrEffectRef* Create(GrTexture* tex, 35 const SkMatrix& matrix, 36 GrTextureParams::FilterMode filterMode, 37 GrCoordSet coordSet = kLocal_GrCoordSet) { 38 AutoEffectUnref effect( 39 SkNEW_ARGS(GrSimpleTextureEffect, (tex, matrix, filterMode, coordSet))); 40 return CreateEffectRef(effect); 41 } 42 43 static GrEffectRef* Create(GrTexture* tex, 44 const SkMatrix& matrix, 45 const GrTextureParams& p, 46 GrCoordSet coordSet = kLocal_GrCoordSet) { 47 AutoEffectUnref effect(SkNEW_ARGS(GrSimpleTextureEffect, (tex, matrix, p, coordSet))); 48 return CreateEffectRef(effect); 49 } 50 51 virtual ~GrSimpleTextureEffect() {} 52 53 static const char* Name() { return "Texture"; } 54 55 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags) const SK_OVERRIDE; 56 57 typedef GrGLSimpleTextureEffect GLEffect; 58 59 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; 60 61 private: 62 GrSimpleTextureEffect(GrTexture* texture, 63 const SkMatrix& matrix, 64 GrTextureParams::FilterMode filterMode, 65 GrCoordSet coordSet) 66 : GrSingleTextureEffect(texture, matrix, filterMode, coordSet) { 67 } 68 69 GrSimpleTextureEffect(GrTexture* texture, 70 const SkMatrix& matrix, 71 const GrTextureParams& params, 72 GrCoordSet coordSet) 73 : GrSingleTextureEffect(texture, matrix, params, coordSet) { 74 } 75 76 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE { 77 const GrSimpleTextureEffect& ste = CastEffect<GrSimpleTextureEffect>(other); 78 return this->hasSameTextureParamsMatrixAndSourceCoords(ste); 79 } 80 81 GR_DECLARE_EFFECT_TEST; 82 83 typedef GrSingleTextureEffect INHERITED; 84 }; 85 86 #endif 87