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 13class 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 */ 23class GrSimpleTextureEffect : public GrSingleTextureEffect { 24public: 25 /* unfiltered, clamp mode */ 26 static GrFragmentProcessor* Create(GrTexture* tex, 27 const SkMatrix& matrix, 28 GrCoordSet coordSet = kLocal_GrCoordSet) { 29 return SkNEW_ARGS(GrSimpleTextureEffect, (tex, matrix, GrTextureParams::kNone_FilterMode, 30 coordSet)); 31 } 32 33 /* clamp mode */ 34 static GrFragmentProcessor* Create(GrTexture* tex, 35 const SkMatrix& matrix, 36 GrTextureParams::FilterMode filterMode, 37 GrCoordSet coordSet = kLocal_GrCoordSet) { 38 return SkNEW_ARGS(GrSimpleTextureEffect, (tex, matrix, filterMode, coordSet)); 39 } 40 41 static GrFragmentProcessor* Create(GrTexture* tex, 42 const SkMatrix& matrix, 43 const GrTextureParams& p, 44 GrCoordSet coordSet = kLocal_GrCoordSet) { 45 return SkNEW_ARGS(GrSimpleTextureEffect, (tex, matrix, p, coordSet)); 46 } 47 48 virtual ~GrSimpleTextureEffect() {} 49 50 static const char* Name() { return "Texture"; } 51 52 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags) const SK_OVERRIDE; 53 54 typedef GrGLSimpleTextureEffect GLProcessor; 55 56 virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERRIDE; 57 58private: 59 GrSimpleTextureEffect(GrTexture* texture, 60 const SkMatrix& matrix, 61 GrTextureParams::FilterMode filterMode, 62 GrCoordSet coordSet) 63 : GrSingleTextureEffect(texture, matrix, filterMode, coordSet) { 64 } 65 66 GrSimpleTextureEffect(GrTexture* texture, 67 const SkMatrix& matrix, 68 const GrTextureParams& params, 69 GrCoordSet coordSet) 70 : GrSingleTextureEffect(texture, matrix, params, coordSet) { 71 } 72 73 virtual bool onIsEqual(const GrProcessor& other) const SK_OVERRIDE { 74 const GrSimpleTextureEffect& ste = other.cast<GrSimpleTextureEffect>(); 75 return this->hasSameTextureParamsMatrixAndSourceCoords(ste); 76 } 77 78 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 79 80 typedef GrSingleTextureEffect INHERITED; 81}; 82 83#endif 84