10a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger/* 20a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger * Copyright 2013 Google Inc. 30a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger * 40a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger * Use of this source code is governed by a BSD-style license that can be 50a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger * found in the LICENSE file. 60a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger */ 70a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 80a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger#ifndef GrCustomCoordsTextureEffect_DEFINED 90a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger#define GrCustomCoordsTextureEffect_DEFINED 100a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 110a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger#include "GrEffect.h" 120a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger#include "GrVertexEffect.h" 130a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 140a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenbergerclass GrGLCustomCoordsTextureEffect; 150a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 160a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger/** 170a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger * The output color of this effect is a modulation of the input color and a sample from a texture. 180a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger * It allows explicit specification of the filtering and wrap modes (GrTextureParams). The input 190a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger * coords are a custom attribute. 200a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger */ 210a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenbergerclass GrCustomCoordsTextureEffect : public GrVertexEffect { 220a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenbergerpublic: 230a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger static GrEffectRef* Create(GrTexture* tex, const GrTextureParams& p) { 240a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger AutoEffectUnref effect(SkNEW_ARGS(GrCustomCoordsTextureEffect, (tex, p))); 250a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger return CreateEffectRef(effect); 260a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger } 270a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 280a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger virtual ~GrCustomCoordsTextureEffect() {} 290a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 300a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger static const char* Name() { return "Texture"; } 310a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 320a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags) const SK_OVERRIDE; 330a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 340a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger typedef GrGLCustomCoordsTextureEffect GLEffect; 350a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 360a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; 370a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 380a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenbergerprivate: 390a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger GrCustomCoordsTextureEffect(GrTexture* texture, const GrTextureParams& params); 400a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 410a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE; 420a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 430a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger GrTextureAccess fTextureAccess; 440a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 450a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger GR_DECLARE_EFFECT_TEST; 460a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 470a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger typedef GrVertexEffect INHERITED; 480a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger}; 490a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 500a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger#endif 51