diff options
author | reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2009-06-12 20:09:24 +0000 |
---|---|---|
committer | reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2009-06-12 20:09:24 +0000 |
commit | b2c5f2d2606930c4551d31a31921d87e0dd37cee (patch) | |
tree | f6c63e79a4e97f073f393f49f8e4925fa990931b /src | |
parent | c552a43c7fe195bdafaa2394df21d08e34ccb96b (diff) |
make the same prerounding fix for the shadeSpan16 case
git-svn-id: http://skia.googlecode.com/svn/trunk@213 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src')
-rw-r--r-- | src/effects/SkGradientShader.cpp | 32 |
1 files changed, 11 insertions, 21 deletions
diff --git a/src/effects/SkGradientShader.cpp b/src/effects/SkGradientShader.cpp index a0da6de333..87d70c23b0 100644 --- a/src/effects/SkGradientShader.cpp +++ b/src/effects/SkGradientShader.cpp @@ -794,25 +794,23 @@ void Linear_Gradient::shadeSpan16(int x, int y, uint16_t dstC[], int count) int toggle = ((x ^ y) & 1) << kCache16Bits; #endif - if (fDstToIndexClass != kPerspective_MatrixClass) - { + if (fDstToIndexClass != kPerspective_MatrixClass) { dstProc(fDstToIndex, SkIntToScalar(x), SkIntToScalar(y), &srcPt); SkFixed dx, fx = SkScalarToFixed(srcPt.fX); + // preround fx by half the amount we throw away + fx += 1 << 7; - if (fDstToIndexClass == kFixedStepInX_MatrixClass) - { + if (fDstToIndexClass == kFixedStepInX_MatrixClass) { SkFixed dxStorage[1]; (void)fDstToIndex.fixedStepInX(SkIntToScalar(y), dxStorage, NULL); dx = dxStorage[0]; - } - else - { + } else { SkASSERT(fDstToIndexClass == kLinear_MatrixClass); dx = SkScalarToFixed(fDstToIndex.getScaleX()); } - if (SkFixedNearlyZero(dx)) // we're a vertical gradient, so no change in a span - { + if (SkFixedNearlyZero(dx)) { + // we're a vertical gradient, so no change in a span unsigned fi = proc(fx) >> 10; SkASSERT(fi <= 63); #ifdef TEST_GRADIENT_DITHER @@ -820,9 +818,7 @@ void Linear_Gradient::shadeSpan16(int x, int y, uint16_t dstC[], int count) #else sk_memset16(dstC, cache[fi], count); #endif - } - else if (proc == clamp_tileproc) - { + } else if (proc == clamp_tileproc) { do { unsigned fi = SkClampMax(fx >> 10, 63); SkASSERT(fi <= 63); @@ -834,9 +830,7 @@ void Linear_Gradient::shadeSpan16(int x, int y, uint16_t dstC[], int count) *dstC++ = cache[fi]; #endif } while (--count != 0); - } - else if (proc == mirror_tileproc) - { + } else if (proc == mirror_tileproc) { do { unsigned fi = mirror_6bits(fx >> 10); SkASSERT(fi <= 0x3F); @@ -848,9 +842,7 @@ void Linear_Gradient::shadeSpan16(int x, int y, uint16_t dstC[], int count) *dstC++ = cache[fi]; #endif } while (--count != 0); - } - else - { + } else { SkASSERT(proc == repeat_tileproc); do { unsigned fi = repeat_6bits(fx >> 10); @@ -864,9 +856,7 @@ void Linear_Gradient::shadeSpan16(int x, int y, uint16_t dstC[], int count) #endif } while (--count != 0); } - } - else - { + } else { SkScalar dstX = SkIntToScalar(x); SkScalar dstY = SkIntToScalar(y); do { |