Index: src/gpu/effects/GrBicubicEffect.h |
diff --git a/src/gpu/effects/GrBicubicEffect.h b/src/gpu/effects/GrBicubicEffect.h |
index 85bec771b4706858439a457f389abb9ddec8c0c1..cc8b1208634d76a2627f6d8c4f5946a6bb2ff7b8 100644 |
--- a/src/gpu/effects/GrBicubicEffect.h |
+++ b/src/gpu/effects/GrBicubicEffect.h |
@@ -9,6 +9,7 @@ |
#define GrBicubicTextureEffect_DEFINED |
#include "GrSingleTextureEffect.h" |
+#include "GrTextureDomain.h" |
#include "GrDrawEffect.h" |
#include "gl/GrGLEffect.h" |
#include "GrTBackendEffectFactory.h" |
@@ -31,46 +32,61 @@ public: |
virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; |
virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags) const SK_OVERRIDE; |
- /** |
- * Create a simple Mitchell filter effect. |
- */ |
- static GrEffectRef* Create(GrTexture* tex) { |
- return Create(tex, gMitchellCoefficients); |
- } |
+ const GrTextureDomain& domain() const { return fDomain; } |
/** |
- * Create a simple filter effect with custom bicubic coefficients. |
+ * Create a simple filter effect with custom bicubic coefficients and optional domain. |
*/ |
- static GrEffectRef* Create(GrTexture* tex, const SkScalar coefficients[16]) { |
- const SkShader::TileMode tm[] = { SkShader::kClamp_TileMode, SkShader::kClamp_TileMode }; |
- return Create(tex, coefficients, MakeDivByTextureWHMatrix(tex), tm); |
+ static GrEffectRef* Create(GrTexture* tex, const SkScalar coefficients[16], |
+ const SkRect* domain = NULL) { |
+ if (NULL == domain) { |
+ static const SkShader::TileMode kTileModes[] = { SkShader::kClamp_TileMode, |
+ SkShader::kClamp_TileMode }; |
+ return Create(tex, coefficients, MakeDivByTextureWHMatrix(tex), kTileModes); |
+ } else { |
+ AutoEffectUnref effect(SkNEW_ARGS(GrBicubicEffect, (tex, coefficients, |
+ MakeDivByTextureWHMatrix(tex), |
+ *domain))); |
+ return CreateEffectRef(effect); |
+ } |
} |
/** |
* Create a Mitchell filter effect with specified texture matrix and x/y tile modes. |
*/ |
- static GrEffectRef* Create(GrTexture* tex, |
- const SkMatrix& matrix, |
+ static GrEffectRef* Create(GrTexture* tex, const SkMatrix& matrix, |
SkShader::TileMode tileModes[2]) { |
return Create(tex, gMitchellCoefficients, matrix, tileModes); |
} |
/** |
- * The most general Create method. This allows specification of the bicubic coefficients, the |
- * texture matrix, and the x/y tilemodes. |
+ * Create a filter effect with custom bicubic coefficients, the texture matrix, and the x/y |
+ * tilemodes. |
*/ |
static GrEffectRef* Create(GrTexture* tex, const SkScalar coefficients[16], |
- const SkMatrix& matrix, |
- const SkShader::TileMode tileModes[2]) { |
+ const SkMatrix& matrix, const SkShader::TileMode tileModes[2]) { |
AutoEffectUnref effect(SkNEW_ARGS(GrBicubicEffect, (tex, coefficients, matrix, tileModes))); |
return CreateEffectRef(effect); |
} |
+ /** |
+ * Create a Mitchell filter effect with a texture matrix and a domain. |
+ */ |
+ static GrEffectRef* Create(GrTexture* tex, const SkMatrix& matrix, const SkRect& domain) { |
+ AutoEffectUnref effect(SkNEW_ARGS(GrBicubicEffect, (tex, gMitchellCoefficients, matrix, |
+ domain))); |
+ return CreateEffectRef(effect); |
+ } |
+ |
private: |
GrBicubicEffect(GrTexture*, const SkScalar coefficients[16], |
const SkMatrix &matrix, const SkShader::TileMode tileModes[2]); |
+ GrBicubicEffect(GrTexture*, const SkScalar coefficients[16], |
+ const SkMatrix &matrix, const SkRect& domain); |
virtual bool onIsEqual(const GrEffect&) const SK_OVERRIDE; |
- float fCoefficients[16]; |
+ |
+ float fCoefficients[16]; |
+ GrTextureDomain fDomain; |
GR_DECLARE_EFFECT_TEST; |