diff options
author | fmalita <fmalita@chromium.org> | 2015-12-18 09:36:18 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-18 09:36:18 -0800 |
commit | 3e6be16e6d4dda6a27f0e1dbfe7c87fecfbf5577 (patch) | |
tree | dc05783873039d000e7f126e1c5d7fc328907ecf /src/core/SkBitmapProcState.cpp | |
parent | 14d8fa0f58bf7f814901d2ae068af8814d6ed1a4 (diff) |
Revert of Repeating SkBitmapProcState rounding bias (patchset #6 id:100001 of https://codereview.chromium.org/1529833003/ )
Reason for revert:
We need a SkFractionalInt auto mapper flavor, otherwise we're losing precision for some procs => seaming artifacs
(https://gold.skia.org/diff?test=giantbitmap_mirror_point_rotate&left=0dd7a412fce81586e6a142e039ec2de9&top=a706d4bb2b8e994b936445b87115b07e)
Original issue's description:
> Repeating SkBitmapProcState rounding bias
>
> Observe the bias in repeat matrix procs also.
>
> Introduce a utility class to handle device space -> bitmap space
> mapping.
>
> BUG=skia:4680,skia:4649
> R=reed@google.com
> GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1529833003
>
> Committed: https://skia.googlesource.com/skia/+/5ae7fdcc3d7712da3193c39a751e88b092aa82db
TBR=reed@google.com
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:4680,skia:4649
Review URL: https://codereview.chromium.org/1531423003
Diffstat (limited to 'src/core/SkBitmapProcState.cpp')
-rw-r--r-- | src/core/SkBitmapProcState.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/core/SkBitmapProcState.cpp b/src/core/SkBitmapProcState.cpp index 6ed83002d9..487bd80402 100644 --- a/src/core/SkBitmapProcState.cpp +++ b/src/core/SkBitmapProcState.cpp @@ -820,10 +820,15 @@ void Clamp_S32_opaque_D32_nofilter_DX_shaderproc(const SkBitmapProcState& s, in SkFractionalInt fx; int dstY; { - const SkBitmapProcStateAutoMapper mapper(s, x, y); + SkPoint pt; + s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, SkIntToScalar(y) + SK_ScalarHalf, + &pt); + fx = SkScalarToFractionalInt(pt.fY) + + bitmap_sampler_inv_bias(s.fInvMatrix.getScaleY()); const unsigned maxY = s.fPixmap.height() - 1; - dstY = SkClampMax(SkFixedFloorToInt(mapper.y()), maxY); - fx = SkFixedToFractionalInt(mapper.x()); + dstY = SkClampMax(SkFractionalIntToInt(fx), maxY); + fx = SkScalarToFractionalInt(pt.fX) + + bitmap_sampler_inv_bias(s.fInvMatrix.getScaleX()); } const SkPMColor* SK_RESTRICT src = s.fPixmap.addr32(0, dstY); @@ -859,3 +864,4 @@ void Clamp_S32_opaque_D32_nofilter_DX_shaderproc(const SkBitmapProcState& s, in } } } + |