aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/effects/GrBicubicEffect.h
diff options
context:
space:
mode:
authorGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-12-16 15:18:11 +0000
committerGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-12-16 15:18:11 +0000
commit7d7f31433b627e62f518e9186d3f2d9bd44662e0 (patch)
treeb9932e94cf4ae25684bc3cf9f4152ca6ba1a6b66 /src/gpu/effects/GrBicubicEffect.h
parent3c12840b234e614faf569e80f311a77ce65d9fe0 (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.h50
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;