Move dither toggle logic into common helper functions, to make it easier to
change their behavior later. No functional change.
Review URL: https://codereview.appspot.com/7241063
git-svn-id: http://skia.googlecode.com/svn/trunk@7525 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp
index b194d50..0d3cc7e 100644
--- a/src/effects/gradients/SkLinearGradient.cpp
+++ b/src/effects/gradients/SkLinearGradient.cpp
@@ -111,7 +111,7 @@
SkASSERT(fi <= 0xFF); \
fx += dx; \
*dstC++ = cache[toggle + fi]; \
- toggle ^= SkGradientShaderBase::kDitherStride32; \
+ toggle = next_dither_toggle(toggle); \
} while (0)
namespace {
@@ -156,7 +156,7 @@
if ((count = range.fCount0) > 0) {
sk_memset32_dither(dstC,
cache[toggle + range.fV0],
- cache[(toggle ^ SkGradientShaderBase::kDitherStride32) + range.fV0],
+ cache[next_dither_toggle(toggle) + range.fV0],
count);
dstC += count;
}
@@ -178,7 +178,7 @@
if ((count = range.fCount2) > 0) {
sk_memset32_dither(dstC,
cache[toggle + range.fV1],
- cache[(toggle ^ SkGradientShaderBase::kDitherStride32) + range.fV1],
+ cache[next_dither_toggle(toggle) + range.fV1],
count);
}
}
@@ -192,7 +192,7 @@
SkASSERT(fi <= 0xFF);
fx += dx;
*dstC++ = cache[toggle + fi];
- toggle ^= SkGradientShaderBase::kDitherStride32;
+ toggle = next_dither_toggle(toggle);
} while (--count != 0);
}
@@ -205,7 +205,7 @@
SkASSERT(fi <= 0xFF);
fx += dx;
*dstC++ = cache[toggle + fi];
- toggle ^= SkGradientShaderBase::kDitherStride32;
+ toggle = next_dither_toggle(toggle);
} while (--count != 0);
}
@@ -220,7 +220,7 @@
TileProc proc = fTileProc;
const SkPMColor* SK_RESTRICT cache = this->getCache32();
#ifdef USE_DITHER_32BIT_GRADIENT
- int toggle = ((x ^ y) & 1) * kDitherStride32;
+ int toggle = init_dither_toggle(x, y);
#else
int toggle = 0;
#endif
@@ -258,7 +258,7 @@
unsigned fi = proc(SkScalarToFixed(srcPt.fX));
SkASSERT(fi <= 0xFFFF);
*dstC++ = cache[toggle + (fi >> kCache32Shift)];
- toggle ^= SkGradientShaderBase::kDitherStride32;
+ toggle = next_dither_toggle(toggle);
dstX += SK_Scalar1;
} while (--count != 0);
}
@@ -310,7 +310,7 @@
SkASSERT(fi < SkGradientShaderBase::kCache16Count); \
fx += dx; \
*dstC++ = cache[toggle + fi]; \
- toggle ^= SkGradientShaderBase::kDitherStride16; \
+ toggle = next_dither_toggle16(toggle); \
} while (0)
namespace {
@@ -327,7 +327,7 @@
unsigned fi = proc(fx) >> SkGradientShaderBase::kCache16Shift;
SkASSERT(fi < SkGradientShaderBase::kCache16Count);
dither_memset16(dstC, cache[toggle + fi],
- cache[(toggle ^ SkGradientShaderBase::kDitherStride16) + fi], count);
+ cache[next_dither_toggle16(toggle) + fi], count);
}
@@ -341,7 +341,7 @@
if ((count = range.fCount0) > 0) {
dither_memset16(dstC,
cache[toggle + range.fV0],
- cache[(toggle ^ SkGradientShaderBase::kDitherStride16) + range.fV0],
+ cache[next_dither_toggle16(toggle) + range.fV0],
count);
dstC += count;
}
@@ -363,7 +363,7 @@
if ((count = range.fCount2) > 0) {
dither_memset16(dstC,
cache[toggle + range.fV1],
- cache[(toggle ^ SkGradientShaderBase::kDitherStride16) + range.fV1],
+ cache[next_dither_toggle16(toggle) + range.fV1],
count);
}
}
@@ -378,7 +378,7 @@
SkASSERT(fi < SkGradientShaderBase::kCache16Count);
fx += dx;
*dstC++ = cache[toggle + fi];
- toggle ^= SkGradientShaderBase::kDitherStride16;
+ toggle = next_dither_toggle16(toggle);
} while (--count != 0);
}
@@ -392,7 +392,7 @@
SkASSERT(fi < SkGradientShaderBase::kCache16Count);
fx += dx;
*dstC++ = cache[toggle + fi];
- toggle ^= SkGradientShaderBase::kDitherStride16;
+ toggle = next_dither_toggle16(toggle);
} while (--count != 0);
}
}
@@ -405,7 +405,7 @@
SkMatrix::MapXYProc dstProc = fDstToIndexProc;
TileProc proc = fTileProc;
const uint16_t* SK_RESTRICT cache = this->getCache16();
- int toggle = ((x ^ y) & 1) * kDitherStride16;
+ int toggle = init_dither_toggle16(x, y);
if (fDstToIndexClass != kPerspective_MatrixClass) {
dstProc(fDstToIndex, SkIntToScalar(x) + SK_ScalarHalf,
@@ -442,7 +442,7 @@
int index = fi >> kCache16Shift;
*dstC++ = cache[toggle + index];
- toggle ^= SkGradientShaderBase::kDitherStride16;
+ toggle = next_dither_toggle16(toggle);
dstX += SK_Scalar1;
} while (--count != 0);