aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkBitmapProcState.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkBitmapProcState.cpp')
-rw-r--r--src/core/SkBitmapProcState.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/core/SkBitmapProcState.cpp b/src/core/SkBitmapProcState.cpp
index d90fbf2fa0..4d66860c8d 100644
--- a/src/core/SkBitmapProcState.cpp
+++ b/src/core/SkBitmapProcState.cpp
@@ -459,7 +459,12 @@ static void S32_D32_constX_shaderproc(const SkBitmapProcState& s,
// chooseProcs multiples the inverse matrix by the inverse of the
// bitmap's width and height. Since this method is going to do
// its own tiling and sampling we need to undo that here.
- yTemp = SkScalarFloorToInt(pt.fY * s.fBitmap->height());
+ if (SkShader::kClamp_TileMode != s.fTileModeX ||
+ SkShader::kClamp_TileMode != s.fTileModeY) {
+ yTemp = SkScalarFloorToInt(pt.fY * s.fBitmap->height());
+ } else {
+ yTemp = SkScalarFloorToInt(pt.fY);
+ }
} else {
yTemp = s.fFilterOneY + y;
}
@@ -485,7 +490,9 @@ static void S32_D32_constX_shaderproc(const SkBitmapProcState& s,
SkIntToScalar(x) + SK_ScalarHalf,
SkIntToScalar(y) + SK_ScalarHalf,
&pt);
- if (s.fInvType > SkMatrix::kTranslate_Mask) {
+ if (s.fInvType > SkMatrix::kTranslate_Mask &&
+ (SkShader::kClamp_TileMode != s.fTileModeX ||
+ SkShader::kClamp_TileMode != s.fTileModeY)) {
pt.fY *= s.fBitmap->height();
}
int iY2;