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 * The coord to sample the texture is determine by a matrix. It allows explicit specification of 18 * the filtering and wrap modes (GrTextureParams). 19 */ 20 class GrSimpleTextureEffect : public GrSingleTextureEffect { 21 public: 22 /* unfiltered, clamp mode */ Create(GrTexture * tex,const SkMatrix & matrix)23 static GrEffectRef* Create(GrTexture* tex, const SkMatrix& matrix) { 24 AutoEffectUnref effect(SkNEW_ARGS(GrSimpleTextureEffect, (tex, matrix))); 25 return CreateEffectRef(effect); 26 } 27 28 /* clamp mode */ Create(GrTexture * tex,const SkMatrix & matrix,bool bilerp)29 static GrEffectRef* Create(GrTexture* tex, const SkMatrix& matrix, bool bilerp) { 30 AutoEffectUnref effect(SkNEW_ARGS(GrSimpleTextureEffect, (tex, matrix, bilerp))); 31 return CreateEffectRef(effect); 32 } 33 Create(GrTexture * tex,const SkMatrix & matrix,const GrTextureParams & p)34 static GrEffectRef* Create(GrTexture* tex, const SkMatrix& matrix, const GrTextureParams& p) { 35 AutoEffectUnref effect(SkNEW_ARGS(GrSimpleTextureEffect, (tex, matrix, p))); 36 return CreateEffectRef(effect); 37 } 38 ~GrSimpleTextureEffect()39 virtual ~GrSimpleTextureEffect() {} 40 Name()41 static const char* Name() { return "Texture"; } 42 43 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags) const SK_OVERRIDE; 44 45 typedef GrGLSimpleTextureEffect GLEffect; 46 47 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; 48 49 private: GrSimpleTextureEffect(GrTexture * texture,const SkMatrix & matrix)50 GrSimpleTextureEffect(GrTexture* texture, const SkMatrix& matrix) 51 : GrSingleTextureEffect(texture, matrix) {} GrSimpleTextureEffect(GrTexture * texture,const SkMatrix & matrix,bool bilerp)52 GrSimpleTextureEffect(GrTexture* texture, const SkMatrix& matrix, bool bilerp) 53 : GrSingleTextureEffect(texture, matrix, bilerp) {} GrSimpleTextureEffect(GrTexture * texture,const SkMatrix & matrix,const GrTextureParams & params)54 GrSimpleTextureEffect(GrTexture* texture, const SkMatrix& matrix, const GrTextureParams& params) 55 : GrSingleTextureEffect(texture, matrix, params) {} 56 onIsEqual(const GrEffect & other)57 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE { 58 const GrSimpleTextureEffect& ste = CastEffect<GrSimpleTextureEffect>(other); 59 return this->hasSameTextureParamsAndMatrix(ste); 60 } 61 62 GR_DECLARE_EFFECT_TEST; 63 64 typedef GrSingleTextureEffect INHERITED; 65 }; 66 67 #endif 68