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 GrInvariantOutput; 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 or device space coords as input texture coords. The input coords may be transformed 19 * by a matrix. 20 */ 21 class GrSimpleTextureEffect : public GrSingleTextureEffect { 22 public: 23 /* unfiltered, clamp mode */ 24 static const GrFragmentProcessor* Create(GrTexture* tex, 25 const SkMatrix& matrix, 26 GrCoordSet coordSet = kLocal_GrCoordSet) { 27 return new GrSimpleTextureEffect(tex, matrix, GrTextureParams::kNone_FilterMode, coordSet); 28 } 29 30 /* clamp mode */ 31 static GrFragmentProcessor* Create(GrTexture* tex, 32 const SkMatrix& matrix, 33 GrTextureParams::FilterMode filterMode, 34 GrCoordSet coordSet = kLocal_GrCoordSet) { 35 return new GrSimpleTextureEffect(tex, matrix, filterMode, coordSet); 36 } 37 38 static GrFragmentProcessor* Create(GrTexture* tex, 39 const SkMatrix& matrix, 40 const GrTextureParams& p, 41 GrCoordSet coordSet = kLocal_GrCoordSet) { 42 return new GrSimpleTextureEffect(tex, matrix, p, coordSet); 43 } 44 ~GrSimpleTextureEffect()45 virtual ~GrSimpleTextureEffect() {} 46 name()47 const char* name() const override { return "SimpleTexture"; } 48 49 private: GrSimpleTextureEffect(GrTexture * texture,const SkMatrix & matrix,GrTextureParams::FilterMode filterMode,GrCoordSet coordSet)50 GrSimpleTextureEffect(GrTexture* texture, 51 const SkMatrix& matrix, 52 GrTextureParams::FilterMode filterMode, 53 GrCoordSet coordSet) 54 : GrSingleTextureEffect(texture, matrix, filterMode, coordSet) { 55 this->initClassID<GrSimpleTextureEffect>(); 56 } 57 GrSimpleTextureEffect(GrTexture * texture,const SkMatrix & matrix,const GrTextureParams & params,GrCoordSet coordSet)58 GrSimpleTextureEffect(GrTexture* texture, 59 const SkMatrix& matrix, 60 const GrTextureParams& params, 61 GrCoordSet coordSet) 62 : GrSingleTextureEffect(texture, matrix, params, coordSet) { 63 this->initClassID<GrSimpleTextureEffect>(); 64 } 65 66 GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; 67 68 void onGetGLSLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const override; 69 onIsEqual(const GrFragmentProcessor & other)70 bool onIsEqual(const GrFragmentProcessor& other) const override { return true; } 71 72 void onComputeInvariantOutput(GrInvariantOutput* inout) const override; 73 74 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 75 76 typedef GrSingleTextureEffect INHERITED; 77 }; 78 79 #endif 80