| Index: src/core/SkBitmapProcState.h
|
| diff --git a/src/core/SkBitmapProcState.h b/src/core/SkBitmapProcState.h
|
| index 2d3d0e43479b1c7c991bd2d922b2f797272956cd..26e8db88589297510550e03031b8bab85a7ca0bf 100644
|
| --- a/src/core/SkBitmapProcState.h
|
| +++ b/src/core/SkBitmapProcState.h
|
| @@ -200,6 +200,21 @@ void ClampX_ClampY_nofilter_affine(const SkBitmapProcState& s,
|
| uint32_t xy[], int count, int x, int y);
|
|
|
| // Helper class for mapping the middle of pixel (x, y) into SkFractionalInt bitmap space.
|
| +// Discussion:
|
| +// Overall, this code takes a point in destination space, and uses the center of the pixel
|
| +// at (x, y) to determine the sample point in source space. It then adjusts the pixel by different
|
| +// amounts based in filtering and tiling.
|
| +// This code can be broken into two main cases based on filtering:
|
| +// * no filtering (nearest neighbor) - when using nearest neighbor filtering all tile modes reduce
|
| +// the sampled by one ulp. If a simple point pt lies precisely on XXX.1/2 then it forced down
|
| +// when positive making 1/2 + 1/2 = .999999 instead of 1.0.
|
| +// * filtering - in the filtering case, the code calculates the -1/2 shift for starting the
|
| +// bilerp kernel. There is a twist; there is a big difference between clamp and the other tile
|
| +// modes. In tile and repeat the matrix has been reduced by an additional 1/width and 1/height
|
| +// factor. This maps from destination space to [0, 1) (instead of source space) to allow easy
|
| +// modulo arithmetic. This means that the -1/2 needed by bilerp is actually 1/2 * 1/width for x
|
| +// and 1/2 * 1/height for y. This is what happens when the poorly named fFilterOne{X|Y} is
|
| +// divided by two.
|
| class SkBitmapProcStateAutoMapper {
|
| public:
|
| SkBitmapProcStateAutoMapper(const SkBitmapProcState& s, int x, int y,
|
|
|