OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "SkMath.h" | 9 #include "SkMath.h" |
10 #include "SkMathPriv.h" | 10 #include "SkMathPriv.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | | 48 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | |
49 SkMatrix::kScale_Mask)) == 0); | 49 SkMatrix::kScale_Mask)) == 0); |
50 | 50 |
51 PREAMBLE(s); | 51 PREAMBLE(s); |
52 // we store y, x, x, x, x, x | 52 // we store y, x, x, x, x, x |
53 | 53 |
54 const unsigned maxX = s.fBitmap->width() - 1; | 54 const unsigned maxX = s.fBitmap->width() - 1; |
55 SkFractionalInt fx; | 55 SkFractionalInt fx; |
56 { | 56 { |
57 SkPoint pt; | 57 SkPoint pt; |
58 s.fInvProc(*s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, | 58 s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, |
59 SkIntToScalar(y) + SK_ScalarHalf, &pt); | 59 SkIntToScalar(y) + SK_ScalarHalf, &pt); |
60 fx = SkScalarToFractionalInt(pt.fY); | 60 fx = SkScalarToFractionalInt(pt.fY); |
61 const unsigned maxY = s.fBitmap->height() - 1; | 61 const unsigned maxY = s.fBitmap->height() - 1; |
62 *xy++ = TILEY_PROCF(SkFractionalIntToFixed(fx), maxY); | 62 *xy++ = TILEY_PROCF(SkFractionalIntToFixed(fx), maxY); |
63 fx = SkScalarToFractionalInt(pt.fX); | 63 fx = SkScalarToFractionalInt(pt.fX); |
64 } | 64 } |
65 | 65 |
66 if (0 == maxX) { | 66 if (0 == maxX) { |
67 // all of the following X values must be 0 | 67 // all of the following X values must be 0 |
68 memset(xy, 0, count * sizeof(uint16_t)); | 68 memset(xy, 0, count * sizeof(uint16_t)); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
109 | 109 |
110 void AFFINE_NOFILTER_NAME(const SkBitmapProcState& s, | 110 void AFFINE_NOFILTER_NAME(const SkBitmapProcState& s, |
111 uint32_t xy[], int count, int x, int y) { | 111 uint32_t xy[], int count, int x, int y) { |
112 SkASSERT(s.fInvType & SkMatrix::kAffine_Mask); | 112 SkASSERT(s.fInvType & SkMatrix::kAffine_Mask); |
113 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | | 113 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | |
114 SkMatrix::kScale_Mask | | 114 SkMatrix::kScale_Mask | |
115 SkMatrix::kAffine_Mask)) == 0); | 115 SkMatrix::kAffine_Mask)) == 0); |
116 | 116 |
117 PREAMBLE(s); | 117 PREAMBLE(s); |
118 SkPoint srcPt; | 118 SkPoint srcPt; |
119 s.fInvProc(*s.fInvMatrix, | 119 s.fInvProc(s.fInvMatrix, |
120 SkIntToScalar(x) + SK_ScalarHalf, | 120 SkIntToScalar(x) + SK_ScalarHalf, |
121 SkIntToScalar(y) + SK_ScalarHalf, &srcPt); | 121 SkIntToScalar(y) + SK_ScalarHalf, &srcPt); |
122 | 122 |
123 SkFractionalInt fx = SkScalarToFractionalInt(srcPt.fX); | 123 SkFractionalInt fx = SkScalarToFractionalInt(srcPt.fX); |
124 SkFractionalInt fy = SkScalarToFractionalInt(srcPt.fY); | 124 SkFractionalInt fy = SkScalarToFractionalInt(srcPt.fY); |
125 SkFractionalInt dx = s.fInvSxFractionalInt; | 125 SkFractionalInt dx = s.fInvSxFractionalInt; |
126 SkFractionalInt dy = s.fInvKyFractionalInt; | 126 SkFractionalInt dy = s.fInvKyFractionalInt; |
127 int maxX = s.fBitmap->width() - 1; | 127 int maxX = s.fBitmap->width() - 1; |
128 int maxY = s.fBitmap->height() - 1; | 128 int maxY = s.fBitmap->height() - 1; |
129 | 129 |
130 for (int i = count; i > 0; --i) { | 130 for (int i = count; i > 0; --i) { |
131 *xy++ = (TILEY_PROCF(SkFractionalIntToFixed(fy), maxY) << 16) | | 131 *xy++ = (TILEY_PROCF(SkFractionalIntToFixed(fy), maxY) << 16) | |
132 TILEX_PROCF(SkFractionalIntToFixed(fx), maxX); | 132 TILEX_PROCF(SkFractionalIntToFixed(fx), maxX); |
133 fx += dx; fy += dy; | 133 fx += dx; fy += dy; |
134 } | 134 } |
135 } | 135 } |
136 | 136 |
137 void PERSP_NOFILTER_NAME(const SkBitmapProcState& s, | 137 void PERSP_NOFILTER_NAME(const SkBitmapProcState& s, |
138 uint32_t* SK_RESTRICT xy, | 138 uint32_t* SK_RESTRICT xy, |
139 int count, int x, int y) { | 139 int count, int x, int y) { |
140 SkASSERT(s.fInvType & SkMatrix::kPerspective_Mask); | 140 SkASSERT(s.fInvType & SkMatrix::kPerspective_Mask); |
141 | 141 |
142 PREAMBLE(s); | 142 PREAMBLE(s); |
143 int maxX = s.fBitmap->width() - 1; | 143 int maxX = s.fBitmap->width() - 1; |
144 int maxY = s.fBitmap->height() - 1; | 144 int maxY = s.fBitmap->height() - 1; |
145 | 145 |
146 SkPerspIter iter(*s.fInvMatrix, | 146 SkPerspIter iter(s.fInvMatrix, |
147 SkIntToScalar(x) + SK_ScalarHalf, | 147 SkIntToScalar(x) + SK_ScalarHalf, |
148 SkIntToScalar(y) + SK_ScalarHalf, count); | 148 SkIntToScalar(y) + SK_ScalarHalf, count); |
149 | 149 |
150 while ((count = iter.next()) != 0) { | 150 while ((count = iter.next()) != 0) { |
151 const SkFixed* SK_RESTRICT srcXY = iter.getXY(); | 151 const SkFixed* SK_RESTRICT srcXY = iter.getXY(); |
152 while (--count >= 0) { | 152 while (--count >= 0) { |
153 *xy++ = (TILEY_PROCF(srcXY[1], maxY) << 16) | | 153 *xy++ = (TILEY_PROCF(srcXY[1], maxY) << 16) | |
154 TILEX_PROCF(srcXY[0], maxX); | 154 TILEX_PROCF(srcXY[0], maxX); |
155 srcXY += 2; | 155 srcXY += 2; |
156 } | 156 } |
(...skipping 24 matching lines...) Expand all Loading... |
181 | 181 |
182 PREAMBLE(s); | 182 PREAMBLE(s); |
183 | 183 |
184 const unsigned maxX = s.fBitmap->width() - 1; | 184 const unsigned maxX = s.fBitmap->width() - 1; |
185 const SkFixed one = s.fFilterOneX; | 185 const SkFixed one = s.fFilterOneX; |
186 const SkFractionalInt dx = s.fInvSxFractionalInt; | 186 const SkFractionalInt dx = s.fInvSxFractionalInt; |
187 SkFractionalInt fx; | 187 SkFractionalInt fx; |
188 | 188 |
189 { | 189 { |
190 SkPoint pt; | 190 SkPoint pt; |
191 s.fInvProc(*s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, | 191 s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, |
192 SkIntToScalar(y) + SK_ScalarHalf, &pt); | 192 SkIntToScalar(y) + SK_ScalarHalf, &pt); |
193 const SkFixed fy = SkScalarToFixed(pt.fY) - (s.fFilterOneY >> 1); | 193 const SkFixed fy = SkScalarToFixed(pt.fY) - (s.fFilterOneY >> 1); |
194 const unsigned maxY = s.fBitmap->height() - 1; | 194 const unsigned maxY = s.fBitmap->height() - 1; |
195 // compute our two Y values up front | 195 // compute our two Y values up front |
196 *xy++ = PACK_FILTER_Y_NAME(fy, maxY, s.fFilterOneY PREAMBLE_ARG_Y); | 196 *xy++ = PACK_FILTER_Y_NAME(fy, maxY, s.fFilterOneY PREAMBLE_ARG_Y); |
197 // now initialize fx | 197 // now initialize fx |
198 fx = SkScalarToFractionalInt(pt.fX) - (SkFixedToFractionalInt(one) >> 1)
; | 198 fx = SkScalarToFractionalInt(pt.fX) - (SkFixedToFractionalInt(one) >> 1)
; |
199 } | 199 } |
200 | 200 |
201 #ifdef CHECK_FOR_DECAL | 201 #ifdef CHECK_FOR_DECAL |
(...skipping 13 matching lines...) Expand all Loading... |
215 | 215 |
216 void AFFINE_FILTER_NAME(const SkBitmapProcState& s, | 216 void AFFINE_FILTER_NAME(const SkBitmapProcState& s, |
217 uint32_t xy[], int count, int x, int y) { | 217 uint32_t xy[], int count, int x, int y) { |
218 SkASSERT(s.fInvType & SkMatrix::kAffine_Mask); | 218 SkASSERT(s.fInvType & SkMatrix::kAffine_Mask); |
219 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | | 219 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | |
220 SkMatrix::kScale_Mask | | 220 SkMatrix::kScale_Mask | |
221 SkMatrix::kAffine_Mask)) == 0); | 221 SkMatrix::kAffine_Mask)) == 0); |
222 | 222 |
223 PREAMBLE(s); | 223 PREAMBLE(s); |
224 SkPoint srcPt; | 224 SkPoint srcPt; |
225 s.fInvProc(*s.fInvMatrix, | 225 s.fInvProc(s.fInvMatrix, |
226 SkIntToScalar(x) + SK_ScalarHalf, | 226 SkIntToScalar(x) + SK_ScalarHalf, |
227 SkIntToScalar(y) + SK_ScalarHalf, &srcPt); | 227 SkIntToScalar(y) + SK_ScalarHalf, &srcPt); |
228 | 228 |
229 SkFixed oneX = s.fFilterOneX; | 229 SkFixed oneX = s.fFilterOneX; |
230 SkFixed oneY = s.fFilterOneY; | 230 SkFixed oneY = s.fFilterOneY; |
231 SkFixed fx = SkScalarToFixed(srcPt.fX) - (oneX >> 1); | 231 SkFixed fx = SkScalarToFixed(srcPt.fX) - (oneX >> 1); |
232 SkFixed fy = SkScalarToFixed(srcPt.fY) - (oneY >> 1); | 232 SkFixed fy = SkScalarToFixed(srcPt.fY) - (oneY >> 1); |
233 SkFixed dx = s.fInvSx; | 233 SkFixed dx = s.fInvSx; |
234 SkFixed dy = s.fInvKy; | 234 SkFixed dy = s.fInvKy; |
235 unsigned maxX = s.fBitmap->width() - 1; | 235 unsigned maxX = s.fBitmap->width() - 1; |
(...skipping 11 matching lines...) Expand all Loading... |
247 uint32_t* SK_RESTRICT xy, int count, | 247 uint32_t* SK_RESTRICT xy, int count, |
248 int x, int y) { | 248 int x, int y) { |
249 SkASSERT(s.fInvType & SkMatrix::kPerspective_Mask); | 249 SkASSERT(s.fInvType & SkMatrix::kPerspective_Mask); |
250 | 250 |
251 PREAMBLE(s); | 251 PREAMBLE(s); |
252 unsigned maxX = s.fBitmap->width() - 1; | 252 unsigned maxX = s.fBitmap->width() - 1; |
253 unsigned maxY = s.fBitmap->height() - 1; | 253 unsigned maxY = s.fBitmap->height() - 1; |
254 SkFixed oneX = s.fFilterOneX; | 254 SkFixed oneX = s.fFilterOneX; |
255 SkFixed oneY = s.fFilterOneY; | 255 SkFixed oneY = s.fFilterOneY; |
256 | 256 |
257 SkPerspIter iter(*s.fInvMatrix, | 257 SkPerspIter iter(s.fInvMatrix, |
258 SkIntToScalar(x) + SK_ScalarHalf, | 258 SkIntToScalar(x) + SK_ScalarHalf, |
259 SkIntToScalar(y) + SK_ScalarHalf, count); | 259 SkIntToScalar(y) + SK_ScalarHalf, count); |
260 | 260 |
261 while ((count = iter.next()) != 0) { | 261 while ((count = iter.next()) != 0) { |
262 const SkFixed* SK_RESTRICT srcXY = iter.getXY(); | 262 const SkFixed* SK_RESTRICT srcXY = iter.getXY(); |
263 do { | 263 do { |
264 *xy++ = PACK_FILTER_Y_NAME(srcXY[1] - (oneY >> 1), maxY, | 264 *xy++ = PACK_FILTER_Y_NAME(srcXY[1] - (oneY >> 1), maxY, |
265 oneY PREAMBLE_ARG_Y); | 265 oneY PREAMBLE_ARG_Y); |
266 *xy++ = PACK_FILTER_X_NAME(srcXY[0] - (oneX >> 1), maxX, | 266 *xy++ = PACK_FILTER_X_NAME(srcXY[0] - (oneX >> 1), maxX, |
267 oneX PREAMBLE_ARG_X); | 267 oneX PREAMBLE_ARG_X); |
(...skipping 26 matching lines...) Expand all Loading... |
294 #undef PERSP_FILTER_NAME | 294 #undef PERSP_FILTER_NAME |
295 | 295 |
296 #undef PREAMBLE | 296 #undef PREAMBLE |
297 #undef PREAMBLE_PARAM_X | 297 #undef PREAMBLE_PARAM_X |
298 #undef PREAMBLE_PARAM_Y | 298 #undef PREAMBLE_PARAM_Y |
299 #undef PREAMBLE_ARG_X | 299 #undef PREAMBLE_ARG_X |
300 #undef PREAMBLE_ARG_Y | 300 #undef PREAMBLE_ARG_Y |
301 | 301 |
302 #undef TILEX_LOW_BITS | 302 #undef TILEX_LOW_BITS |
303 #undef TILEY_LOW_BITS | 303 #undef TILEY_LOW_BITS |
OLD | NEW |