Move GrTextureParams from GrSamplerState to GrTextureAccess
Review URL: https://codereview.appspot.com/6496135/
git-svn-id: http://skia.googlecode.com/svn/trunk@5582 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp
index f0dac4d..9a965ff 100644
--- a/src/effects/gradients/SkGradientShader.cpp
+++ b/src/effects/gradients/SkGradientShader.cpp
@@ -718,7 +718,7 @@
GrGradientEffect::GrGradientEffect(GrContext* ctx,
const SkGradientShaderBase& shader,
- GrSamplerState* sampler)
+ SkShader::TileMode tileMode)
: fUseTexture (true) {
// TODO: check for simple cases where we don't need a texture:
//GradientInfo info;
@@ -737,14 +737,19 @@
fAtlas = GrTextureStripAtlas::GetAtlas(desc);
GrAssert(NULL != fAtlas);
+ // We always filter the gradient table. Each table is one row of a texture, so always y-clamp.
+ GrTextureParams params;
+ params.setBilerp(true);
+ params.setTileModeX(tileMode);
+
fRow = fAtlas->lockRow(bitmap);
if (-1 != fRow) {
fYCoord = fAtlas->getYOffset(fRow) + GR_ScalarHalf *
fAtlas->getVerticalScaleFactor();
- fTextureAccess.reset(fAtlas->getTexture());
+ fTextureAccess.reset(fAtlas->getTexture(), params);
} else {
- GrTexture* texture = GrLockCachedBitmapTexture(ctx, bitmap, sampler->textureParams());
- fTextureAccess.reset(texture);
+ GrTexture* texture = GrLockCachedBitmapTexture(ctx, bitmap, ¶ms);
+ fTextureAccess.reset(texture, params);
fYCoord = GR_ScalarHalf;
// Unlock immediately, this is not great, but we don't have a way of
diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h
index 0e7c2fc..bdea900 100644
--- a/src/effects/gradients/SkGradientShaderPriv.h
+++ b/src/effects/gradients/SkGradientShaderPriv.h
@@ -226,8 +226,9 @@
class GrGradientEffect : public GrCustomStage {
public:
- GrGradientEffect(GrContext* ctx, const SkGradientShaderBase& shader,
- GrSamplerState* sampler);
+ GrGradientEffect(GrContext* ctx,
+ const SkGradientShaderBase& shader,
+ SkShader::TileMode tileMode);
virtual ~GrGradientEffect();
diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp
index bcebc26..4b673f6 100644
--- a/src/effects/gradients/SkLinearGradient.cpp
+++ b/src/effects/gradients/SkLinearGradient.cpp
@@ -503,9 +503,8 @@
class GrLinearGradient : public GrGradientEffect {
public:
- GrLinearGradient(GrContext* ctx, const SkLinearGradient& shader,
- GrSamplerState* sampler)
- : INHERITED(ctx, shader, sampler) { }
+ GrLinearGradient(GrContext* ctx, const SkLinearGradient& shader, SkShader::TileMode tm)
+ : INHERITED(ctx, shader, tm) { }
virtual ~GrLinearGradient() { }
static const char* Name() { return "Linear Gradient"; }
@@ -562,10 +561,7 @@
GrSamplerState* sampler) const {
SkASSERT(NULL != context && NULL != sampler);
sampler->matrix()->preConcat(fPtsToUnit);
- sampler->textureParams()->setTileModeX(fTileMode);
- sampler->textureParams()->setTileModeY(kClamp_TileMode);
- sampler->textureParams()->setBilerp(true);
- return SkNEW_ARGS(GrLinearGradient, (context, *this, sampler));
+ return SkNEW_ARGS(GrLinearGradient, (context, *this, fTileMode));
}
#else
diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp
index 799e548..512eafb 100644
--- a/src/effects/gradients/SkRadialGradient.cpp
+++ b/src/effects/gradients/SkRadialGradient.cpp
@@ -500,10 +500,8 @@
class GrRadialGradient : public GrGradientEffect {
public:
- GrRadialGradient(GrContext* ctx,
- const SkRadialGradient& shader,
- GrSamplerState* sampler)
- : INHERITED(ctx, shader, sampler) {
+ GrRadialGradient(GrContext* ctx, const SkRadialGradient& shader, SkShader::TileMode tm)
+ : INHERITED(ctx, shader, tm) {
}
virtual ~GrRadialGradient() { }
@@ -562,10 +560,7 @@
GrSamplerState* sampler) const {
SkASSERT(NULL != context && NULL != sampler);
sampler->matrix()->preConcat(fPtsToUnit);
- sampler->textureParams()->setTileModeX(fTileMode);
- sampler->textureParams()->setTileModeY(kClamp_TileMode);
- sampler->textureParams()->setBilerp(true);
- return SkNEW_ARGS(GrRadialGradient, (context, *this, sampler));
+ return SkNEW_ARGS(GrRadialGradient, (context, *this, fTileMode));
}
#else
diff --git a/src/effects/gradients/SkSweepGradient.cpp b/src/effects/gradients/SkSweepGradient.cpp
index 843d1aa..f18b08e 100644
--- a/src/effects/gradients/SkSweepGradient.cpp
+++ b/src/effects/gradients/SkSweepGradient.cpp
@@ -410,9 +410,8 @@
public:
GrSweepGradient(GrContext* ctx,
- const SkSweepGradient& shader,
- GrSamplerState* sampler)
- : INHERITED(ctx, shader, sampler) { }
+ const SkSweepGradient& shader)
+ : INHERITED(ctx, shader, SkShader::kClamp_TileMode) { }
virtual ~GrSweepGradient() { }
static const char* Name() { return "Sweep Gradient"; }
@@ -467,10 +466,7 @@
GrCustomStage* SkSweepGradient::asNewCustomStage(GrContext* context,
GrSamplerState* sampler) const {
sampler->matrix()->preConcat(fPtsToUnit);
- sampler->textureParams()->setTileModeX(fTileMode);
- sampler->textureParams()->setTileModeY(kClamp_TileMode);
- sampler->textureParams()->setBilerp(true);
- return SkNEW_ARGS(GrSweepGradient, (context, *this, sampler));
+ return SkNEW_ARGS(GrSweepGradient, (context, *this));
}
#else
diff --git a/src/effects/gradients/SkTwoPointConicalGradient.cpp b/src/effects/gradients/SkTwoPointConicalGradient.cpp
index 3466d2c..31e3b37 100644
--- a/src/effects/gradients/SkTwoPointConicalGradient.cpp
+++ b/src/effects/gradients/SkTwoPointConicalGradient.cpp
@@ -370,9 +370,10 @@
class GrConical2Gradient : public GrGradientEffect {
public:
- GrConical2Gradient(GrContext* ctx, const SkTwoPointConicalGradient& shader,
- GrSamplerState* sampler)
- : INHERITED(ctx, shader, sampler)
+ GrConical2Gradient(GrContext* ctx,
+ const SkTwoPointConicalGradient& shader,
+ SkShader::TileMode tm)
+ : INHERITED(ctx, shader, tm)
, fCenterX1(shader.getCenterX1())
, fRadius0(shader.getStartRadius())
, fDiffRadius(shader.getDiffRadius()) { }
@@ -685,10 +686,7 @@
sampler->matrix()->reset();
}
sampler->matrix()->preTranslate(-fCenter1.fX, -fCenter1.fY);
- sampler->textureParams()->setTileModeX(fTileMode);
- sampler->textureParams()->setTileModeY(kClamp_TileMode);
- sampler->textureParams()->setBilerp(true);
- return SkNEW_ARGS(GrConical2Gradient, (context, *this, sampler));
+ return SkNEW_ARGS(GrConical2Gradient, (context, *this, fTileMode));
}
#else
diff --git a/src/effects/gradients/SkTwoPointRadialGradient.cpp b/src/effects/gradients/SkTwoPointRadialGradient.cpp
index 9362ded..97f335d 100644
--- a/src/effects/gradients/SkTwoPointRadialGradient.cpp
+++ b/src/effects/gradients/SkTwoPointRadialGradient.cpp
@@ -405,9 +405,8 @@
class GrRadial2Gradient : public GrGradientEffect {
public:
- GrRadial2Gradient(GrContext* ctx, const SkTwoPointRadialGradient& shader,
- GrSamplerState* sampler)
- : INHERITED(ctx, shader, sampler)
+ GrRadial2Gradient(GrContext* ctx, const SkTwoPointRadialGradient& shader, SkShader::TileMode tm)
+ : INHERITED(ctx, shader, tm)
, fCenterX1(shader.getCenterX1())
, fRadius0(shader.getStartRadius())
, fPosRoot(shader.getDiffRadius() < 0) { }
@@ -660,10 +659,7 @@
sampler->matrix()->reset();
}
sampler->matrix()->preConcat(fPtsToUnit);
- sampler->textureParams()->setTileModeX(fTileMode);
- sampler->textureParams()->setTileModeY(kClamp_TileMode);
- sampler->textureParams()->setBilerp(true);
- return SkNEW_ARGS(GrRadial2Gradient, (context, *this, sampler));
+ return SkNEW_ARGS(GrRadial2Gradient, (context, *this, fTileMode));
}
#else