| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2007 The Android Open Source Project | 2 * Copyright 2007 The Android Open Source Project |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef SkBitmapProcState_DEFINED | 8 #ifndef SkBitmapProcState_DEFINED |
| 9 #define SkBitmapProcState_DEFINED | 9 #define SkBitmapProcState_DEFINED |
| 10 | 10 |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 void ClampX_ClampY_filter_scale(const SkBitmapProcState& s, uint32_t xy[], | 193 void ClampX_ClampY_filter_scale(const SkBitmapProcState& s, uint32_t xy[], |
| 194 int count, int x, int y); | 194 int count, int x, int y); |
| 195 void ClampX_ClampY_nofilter_scale(const SkBitmapProcState& s, uint32_t xy[], | 195 void ClampX_ClampY_nofilter_scale(const SkBitmapProcState& s, uint32_t xy[], |
| 196 int count, int x, int y); | 196 int count, int x, int y); |
| 197 void ClampX_ClampY_filter_affine(const SkBitmapProcState& s, | 197 void ClampX_ClampY_filter_affine(const SkBitmapProcState& s, |
| 198 uint32_t xy[], int count, int x, int y); | 198 uint32_t xy[], int count, int x, int y); |
| 199 void ClampX_ClampY_nofilter_affine(const SkBitmapProcState& s, | 199 void ClampX_ClampY_nofilter_affine(const SkBitmapProcState& s, |
| 200 uint32_t xy[], int count, int x, int y); | 200 uint32_t xy[], int count, int x, int y); |
| 201 | 201 |
| 202 // Helper class for mapping the middle of pixel (x, y) into SkFractionalInt bitm
ap space. | 202 // Helper class for mapping the middle of pixel (x, y) into SkFractionalInt bitm
ap space. |
| 203 // Discussion: |
| 204 // Overall, this code takes a point in destination space, and uses the center of
the pixel |
| 205 // at (x, y) to determine the sample point in source space. It then adjusts the
pixel by different |
| 206 // amounts based in filtering and tiling. |
| 207 // This code can be broken into two main cases based on filtering: |
| 208 // * no filtering (nearest neighbor) - when using nearest neighbor filtering all
tile modes reduce |
| 209 // the sampled by one ulp. If a simple point pt lies precisely on XXX.1/2 then i
t forced down |
| 210 // when positive making 1/2 + 1/2 = .999999 instead of 1.0. |
| 211 // * filtering - in the filtering case, the code calculates the -1/2 shift for s
tarting the |
| 212 // bilerp kernel. There is a twist; there is a big difference between clamp and
the other tile |
| 213 // modes. In tile and repeat the matrix has been reduced by an additional 1/widt
h and 1/height |
| 214 // factor. This maps from destination space to [0, 1) (instead of source space)
to allow easy |
| 215 // modulo arithmetic. This means that the -1/2 needed by bilerp is actually 1/2
* 1/width for x |
| 216 // and 1/2 * 1/height for y. This is what happens when the poorly named fFilterO
ne{X|Y} is |
| 217 // divided by two. |
| 203 class SkBitmapProcStateAutoMapper { | 218 class SkBitmapProcStateAutoMapper { |
| 204 public: | 219 public: |
| 205 SkBitmapProcStateAutoMapper(const SkBitmapProcState& s, int x, int y, | 220 SkBitmapProcStateAutoMapper(const SkBitmapProcState& s, int x, int y, |
| 206 SkPoint* scalarPoint = nullptr) { | 221 SkPoint* scalarPoint = nullptr) { |
| 207 SkPoint pt; | 222 SkPoint pt; |
| 208 s.fInvProc(s.fInvMatrix, | 223 s.fInvProc(s.fInvMatrix, |
| 209 SkIntToScalar(x) + SK_ScalarHalf, | 224 SkIntToScalar(x) + SK_ScalarHalf, |
| 210 SkIntToScalar(y) + SK_ScalarHalf, &pt); | 225 SkIntToScalar(y) + SK_ScalarHalf, &pt); |
| 211 | 226 |
| 212 SkFixed biasX, biasY; | 227 SkFixed biasX, biasY; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 238 SkFixed fixedY() const { return SkFractionalIntToFixed(fY); } | 253 SkFixed fixedY() const { return SkFractionalIntToFixed(fY); } |
| 239 | 254 |
| 240 int intX() const { return SkFractionalIntToInt(fX); } | 255 int intX() const { return SkFractionalIntToInt(fX); } |
| 241 int intY() const { return SkFractionalIntToInt(fY); } | 256 int intY() const { return SkFractionalIntToInt(fY); } |
| 242 | 257 |
| 243 private: | 258 private: |
| 244 SkFractionalInt fX, fY; | 259 SkFractionalInt fX, fY; |
| 245 }; | 260 }; |
| 246 | 261 |
| 247 #endif | 262 #endif |
| OLD | NEW |