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