SkBitmapProcState_shaderproc.h revision 152f748386143475daf9da31aceb424dc7c8a7e6
1#define SCALE_FILTER_NAME MAKENAME(_filter_DX_shaderproc) 2 3static void SCALE_FILTER_NAME(const SkBitmapProcState& s, int x, int y, 4 DSTTYPE* SK_RESTRICT colors, int count) { 5 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | 6 SkMatrix::kScale_Mask)) == 0); 7 SkASSERT(s.fInvKy == 0); 8 SkASSERT(count > 0 && colors != NULL); 9 SkASSERT(s.fDoFilter); 10 SkDEBUGCODE(CHECKSTATE(s);) 11 12 const unsigned maxX = s.fBitmap->width() - 1; 13 const SkFixed oneX = s.fFilterOneX; 14 const SkFixed dx = s.fInvSx; 15 SkFixed fx; 16 const SRCTYPE* SK_RESTRICT row0; 17 const SRCTYPE* SK_RESTRICT row1; 18 unsigned subY; 19 20 { 21 SkPoint pt; 22 s.fInvProc(*s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, 23 SkIntToScalar(y) + SK_ScalarHalf, &pt); 24 SkFixed fy = SkScalarToFixed(pt.fY) - (s.fFilterOneY >> 1); 25 const unsigned maxY = s.fBitmap->height() - 1; 26 // compute our two Y values up front 27 subY = TILEY_LOW_BITS(fy, maxY); 28 int y0 = TILEY_PROCF(fy, maxY); 29 int y1 = TILEY_PROCF((fy + s.fFilterOneY), maxY); 30 31 const char* SK_RESTRICT srcAddr = (const char*)s.fBitmap->getPixels(); 32 unsigned rb = s.fBitmap->rowBytes(); 33 row0 = (const SRCTYPE*)(srcAddr + y0 * rb); 34 row1 = (const SRCTYPE*)(srcAddr + y1 * rb); 35 // now initialize fx 36 fx = SkScalarToFixed(pt.fX) - (oneX >> 1); 37 } 38 39 do { 40 unsigned subX = TILEX_LOW_BITS(fx, maxX); 41 unsigned x0 = TILEX_PROCF(fx, maxX); 42 unsigned x1 = TILEX_PROCF((fx + oneX), maxX); 43 44 FILTER_PROC(subX, subY, 45 SRC_TO_FILTER(row0[x0]), 46 SRC_TO_FILTER(row0[x1]), 47 SRC_TO_FILTER(row1[x0]), 48 SRC_TO_FILTER(row1[x1]), 49 colors); 50 colors += 1; 51 52 fx += dx; 53 } while (--count != 0); 54} 55 56/////////////////////////////////////////////////////////////////////////////// 57 58#undef TILEX_PROCF 59#undef TILEY_PROCF 60#undef TILEX_LOW_BITS 61#undef TILEY_LOW_BITS 62#undef MAKENAME 63#undef SRCTYPE 64#undef DSTTYPE 65#undef CHECKSTATE 66#undef SRC_TO_FILTER 67#undef FILTER_TO_DST 68 69#undef SCALE_FILTER_NAME 70