Index: src/effects/SkBlendImageFilter.cpp |
=================================================================== |
--- src/effects/SkBlendImageFilter.cpp (revision 8241) |
+++ src/effects/SkBlendImageFilter.cpp (working copy) |
@@ -94,23 +94,23 @@ |
#if SK_SUPPORT_GPU |
class GrGLBlendEffect : public GrGLEffect { |
public: |
- GrGLBlendEffect(const GrBackendEffectFactory& factory, |
- const GrEffectRef& effect); |
+ GrGLBlendEffect(const GrBackendEffectFactory&, const GrDrawEffect&); |
virtual ~GrGLBlendEffect(); |
virtual void emitCode(GrGLShaderBuilder*, |
- const GrEffectStage&, |
+ const GrDrawEffect&, |
EffectKey, |
- const char* vertexCoords, |
const char* outputColor, |
const char* inputColor, |
const TextureSamplerArray&) SK_OVERRIDE; |
- static inline EffectKey GenKey(const GrEffectStage&, const GrGLCaps&); |
+ static inline EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&); |
- virtual void setData(const GrGLUniformManager&, const GrEffectStage&); |
+ virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVERRIDE; |
private: |
+ static const GrEffect::CoordsType kCoordsType = GrEffect::kLocal_CoordsType; |
+ |
SkBlendImageFilter::Mode fMode; |
GrGLEffectMatrix fForegroundEffectMatrix; |
GrGLEffectMatrix fBackgroundEffectMatrix; |
@@ -131,13 +131,13 @@ |
virtual ~GrBlendEffect(); |
- const GrBackendEffectFactory& getFactory() const; |
+ virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; |
SkBlendImageFilter::Mode mode() const { return fMode; } |
typedef GrGLBlendEffect GLEffect; |
static const char* Name() { return "Blend"; } |
- void getConstantColorComponents(GrColor* color, uint32_t* validFlags) const SK_OVERRIDE; |
+ virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags) const SK_OVERRIDE; |
private: |
virtual bool onIsEqual(const GrEffect&) const SK_OVERRIDE; |
@@ -224,27 +224,28 @@ |
/////////////////////////////////////////////////////////////////////////////// |
-GrGLBlendEffect::GrGLBlendEffect(const GrBackendEffectFactory& factory, const GrEffectRef& effect) |
- : INHERITED(factory), |
- fMode(CastEffect<GrBlendEffect>(effect).mode()) { |
+GrGLBlendEffect::GrGLBlendEffect(const GrBackendEffectFactory& factory, |
+ const GrDrawEffect& drawEffect) |
+ : INHERITED(factory) |
+ , fMode(drawEffect.castEffect<GrBlendEffect>().mode()) |
+ , fForegroundEffectMatrix(kCoordsType) |
+ , fBackgroundEffectMatrix(kCoordsType) { |
} |
GrGLBlendEffect::~GrGLBlendEffect() { |
} |
void GrGLBlendEffect::emitCode(GrGLShaderBuilder* builder, |
- const GrEffectStage&, |
+ const GrDrawEffect&, |
EffectKey key, |
- const char* vertexCoords, |
const char* outputColor, |
const char* inputColor, |
const TextureSamplerArray& samplers) { |
+ const GrGLShaderVar& localCoords = builder->localCoordsAttribute(); |
const char* fgCoords; |
const char* bgCoords; |
- GrSLType fgCoordsType = fForegroundEffectMatrix.emitCode( |
- builder, key, vertexCoords, &fgCoords, NULL, "FG"); |
- GrSLType bgCoordsType = fBackgroundEffectMatrix.emitCode( |
- builder, key, vertexCoords, &bgCoords, NULL, "BG"); |
+ GrSLType fgCoordsType = fForegroundEffectMatrix.emitCode(builder, key, &fgCoords, NULL, "FG"); |
+ GrSLType bgCoordsType = fBackgroundEffectMatrix.emitCode(builder, key, &bgCoords, NULL, "BG"); |
const char* bgColor = "bgColor"; |
const char* fgColor = "fgColor"; |
@@ -283,33 +284,35 @@ |
} |
} |
-void GrGLBlendEffect::setData(const GrGLUniformManager& uman, const GrEffectStage& stage) { |
- const GrBlendEffect& blend = GetEffectFromStage<GrBlendEffect>(stage); |
+void GrGLBlendEffect::setData(const GrGLUniformManager& uman, const GrDrawEffect& drawEffect) { |
+ const GrBlendEffect& blend = drawEffect.castEffect<GrBlendEffect>(); |
GrTexture* fgTex = blend.texture(0); |
GrTexture* bgTex = blend.texture(1); |
fForegroundEffectMatrix.setData(uman, |
GrEffect::MakeDivByTextureWHMatrix(fgTex), |
- stage.getCoordChangeMatrix(), |
+ drawEffect, |
fgTex); |
fBackgroundEffectMatrix.setData(uman, |
GrEffect::MakeDivByTextureWHMatrix(bgTex), |
- stage.getCoordChangeMatrix(), |
+ drawEffect, |
bgTex); |
} |
-GrGLEffect::EffectKey GrGLBlendEffect::GenKey(const GrEffectStage& stage, const GrGLCaps&) { |
- const GrBlendEffect& blend = GetEffectFromStage<GrBlendEffect>(stage); |
+GrGLEffect::EffectKey GrGLBlendEffect::GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&) { |
+ const GrBlendEffect& blend = drawEffect.castEffect<GrBlendEffect>(); |
GrTexture* fgTex = blend.texture(0); |
GrTexture* bgTex = blend.texture(1); |
EffectKey fgKey = GrGLEffectMatrix::GenKey(GrEffect::MakeDivByTextureWHMatrix(fgTex), |
- stage.getCoordChangeMatrix(), |
+ drawEffect, |
+ kCoordsType, |
fgTex); |
EffectKey bgKey = GrGLEffectMatrix::GenKey(GrEffect::MakeDivByTextureWHMatrix(bgTex), |
- stage.getCoordChangeMatrix(), |
+ drawEffect, |
+ kCoordsType, |
bgTex); |
bgKey <<= GrGLEffectMatrix::kKeyBits; |
EffectKey modeKey = blend.mode() << (2 * GrGLEffectMatrix::kKeyBits); |