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 "SkMathPriv.h" | 9 #include "SkMathPriv.h" |
10 | 10 |
11 #define SCALE_FILTER_NAME MAKENAME(_filter_DX_shaderproc) | 11 #define SCALE_FILTER_NAME MAKENAME(_filter_DX_shaderproc) |
12 | 12 |
13 // Can't be static in the general case because some of these implementations | 13 // Can't be static in the general case because some of these implementations |
14 // will be defined and referenced in different object files. | 14 // will be defined and referenced in different object files. |
15 void SCALE_FILTER_NAME(const SkBitmapProcState& s, int x, int y, | 15 void SCALE_FILTER_NAME(const SkBitmapProcState& s, int x, int y, |
16 DSTTYPE* SK_RESTRICT colors, int count); | 16 DSTTYPE* SK_RESTRICT colors, int count); |
17 | 17 |
18 void SCALE_FILTER_NAME(const SkBitmapProcState& s, int x, int y, | 18 void SCALE_FILTER_NAME(const SkBitmapProcState& s, int x, int y, |
19 DSTTYPE* SK_RESTRICT colors, int count) { | 19 DSTTYPE* SK_RESTRICT colors, int count) { |
20 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | | 20 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | |
21 SkMatrix::kScale_Mask)) == 0); | 21 SkMatrix::kScale_Mask)) == 0); |
22 SkASSERT(s.fInvKy == 0); | 22 SkASSERT(s.fInvKy == 0); |
23 SkASSERT(count > 0 && colors != NULL); | 23 SkASSERT(count > 0 && colors != NULL); |
24 SkASSERT(s.fDoFilter); | 24 SkASSERT(s.fFilterQuality != SkBitmapProcState::kNone_BitmapFilter); |
25 SkDEBUGCODE(CHECKSTATE(s);) | 25 SkDEBUGCODE(CHECKSTATE(s);) |
26 | 26 |
27 const unsigned maxX = s.fBitmap->width() - 1; | 27 const unsigned maxX = s.fBitmap->width() - 1; |
28 const SkFixed oneX = s.fFilterOneX; | 28 const SkFixed oneX = s.fFilterOneX; |
29 const SkFixed dx = s.fInvSx; | 29 const SkFixed dx = s.fInvSx; |
30 SkFixed fx; | 30 SkFixed fx; |
31 const SRCTYPE* SK_RESTRICT row0; | 31 const SRCTYPE* SK_RESTRICT row0; |
32 const SRCTYPE* SK_RESTRICT row1; | 32 const SRCTYPE* SK_RESTRICT row1; |
33 unsigned subY; | 33 unsigned subY; |
34 | 34 |
35 { | 35 { |
36 SkPoint pt; | 36 SkPoint pt; |
37 s.fInvProc(*s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, | 37 s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, |
38 SkIntToScalar(y) + SK_ScalarHalf, &pt); | 38 SkIntToScalar(y) + SK_ScalarHalf, &pt); |
39 SkFixed fy = SkScalarToFixed(pt.fY) - (s.fFilterOneY >> 1); | 39 SkFixed fy = SkScalarToFixed(pt.fY) - (s.fFilterOneY >> 1); |
40 const unsigned maxY = s.fBitmap->height() - 1; | 40 const unsigned maxY = s.fBitmap->height() - 1; |
41 // compute our two Y values up front | 41 // compute our two Y values up front |
42 subY = TILEY_LOW_BITS(fy, maxY); | 42 subY = TILEY_LOW_BITS(fy, maxY); |
43 int y0 = TILEY_PROCF(fy, maxY); | 43 int y0 = TILEY_PROCF(fy, maxY); |
44 int y1 = TILEY_PROCF((fy + s.fFilterOneY), maxY); | 44 int y1 = TILEY_PROCF((fy + s.fFilterOneY), maxY); |
45 | 45 |
46 const char* SK_RESTRICT srcAddr = (const char*)s.fBitmap->getPixels(); | 46 const char* SK_RESTRICT srcAddr = (const char*)s.fBitmap->getPixels(); |
47 size_t rb = s.fBitmap->rowBytes(); | 47 size_t rb = s.fBitmap->rowBytes(); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 #undef MAKENAME | 85 #undef MAKENAME |
86 #undef SRCTYPE | 86 #undef SRCTYPE |
87 #undef DSTTYPE | 87 #undef DSTTYPE |
88 #undef CHECKSTATE | 88 #undef CHECKSTATE |
89 #undef SRC_TO_FILTER | 89 #undef SRC_TO_FILTER |
90 #undef FILTER_TO_DST | 90 #undef FILTER_TO_DST |
91 #undef PREAMBLE | 91 #undef PREAMBLE |
92 #undef POSTAMBLE | 92 #undef POSTAMBLE |
93 | 93 |
94 #undef SCALE_FILTER_NAME | 94 #undef SCALE_FILTER_NAME |
OLD | NEW |