diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-12-16 15:18:11 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-12-16 15:18:11 +0000 |
commit | 7d7f31433b627e62f518e9186d3f2d9bd44662e0 (patch) | |
tree | b9932e94cf4ae25684bc3cf9f4152ca6ba1a6b66 /src/gpu/effects/GrBicubicEffect.h | |
parent | 3c12840b234e614faf569e80f311a77ce65d9fe0 (diff) |
Use GrTextureDomain in GrBicubicEffect to perform non-bleeding HQ filter drawBitmap.
R=senorblanco@chromium.org, robertphillips@google.com
Author: bsalomon@google.com
Review URL: https://codereview.chromium.org/99203011
git-svn-id: http://skia.googlecode.com/svn/trunk@12687 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/gpu/effects/GrBicubicEffect.h')
-rw-r--r-- | src/gpu/effects/GrBicubicEffect.h | 50 |
1 files changed, 33 insertions, 17 deletions
diff --git a/src/gpu/effects/GrBicubicEffect.h b/src/gpu/effects/GrBicubicEffect.h index 85bec771b4..cc8b120863 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; |