11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project 41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkBitmapSampler.h" 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic SkTileModeProc get_tilemode_proc(SkShader::TileMode mode) 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{ 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project switch (mode) { 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkShader::kClamp_TileMode: 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return do_clamp; 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkShader::kRepeat_TileMode: 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return do_repeat_mod; 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkShader::kMirror_TileMode: 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return do_mirror_mod; 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project default: 221cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkDEBUGFAIL("unknown mode"); 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return NULL; 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkBitmapSampler::SkBitmapSampler(const SkBitmap& bm, bool filter, 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkShader::TileMode tmx, SkShader::TileMode tmy) 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project : fBitmap(bm), fFilterBitmap(filter), fTileModeX(tmx), fTileModeY(tmy) 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{ 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(bm.width() > 0 && bm.height() > 0); 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMaxX = SkToU16(bm.width() - 1); 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMaxY = SkToU16(bm.height() - 1); 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fTileProcX = get_tilemode_proc(tmx); 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fTileProcY = get_tilemode_proc(tmy); 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkBitmapSampler::setPaint(const SkPaint& paint) 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{ 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkNullBitmapSampler : public SkBitmapSampler { 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkNullBitmapSampler(const SkBitmap& bm, bool filter, 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkShader::TileMode tmx, SkShader::TileMode tmy) 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project : SkBitmapSampler(bm, filter, tmx, tmy) {} 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual SkPMColor sample(SkFixed x, SkFixed y) const { return 0; } 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project///////////////////////////////////////////////////////////////////////////////// 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project///////////////////////////////////////////////////////////////////////////////// 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define BITMAP_CLASSNAME_PREFIX(name) ARGB32##name 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define BITMAP_PIXEL_TO_PMCOLOR(bitmap, x, y) *bitmap.getAddr32(x, y) 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkBitmapSamplerTemplate.h" 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkColorPriv.h" 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define BITMAP_CLASSNAME_PREFIX(name) RGB16##name 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define BITMAP_PIXEL_TO_PMCOLOR(bitmap, x, y) SkPixel16ToPixel32(*bitmap.getAddr16(x, y)) 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkBitmapSamplerTemplate.h" 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define BITMAP_CLASSNAME_PREFIX(name) Index8##name 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define BITMAP_PIXEL_TO_PMCOLOR(bitmap, x, y) bitmap.getIndex8Color(x, y) 680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkBitmapSamplerTemplate.h" 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project///////////////////////////////////////////////////////////////////////////////// 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project///////////////////////////////////////////////////////////////////////////////// 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project///////////////// The Bilinear versions 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkFilterProc.h" 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass ARGB32_Bilinear_Sampler : public SkBitmapSampler { 770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project ARGB32_Bilinear_Sampler(const SkBitmap& bm, SkShader::TileMode tmx, SkShader::TileMode tmy) 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project : SkBitmapSampler(bm, true, tmx, tmy) 800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fPtrProcTable = SkGetBilinearFilterPtrProcTable(); 820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual SkPMColor sample(SkFixed x, SkFixed y) const 850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint32_t *p00, *p01, *p10, *p11; 870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // turn pixel centers into the top-left of our filter-box 890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project x -= SK_FixedHalf; 900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project y -= SK_FixedHalf; 910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // compute our pointers 930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkBitmap* bitmap = &fBitmap; 950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int ix = x >> 16; 960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int iy = y >> 16; 970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int maxX = fMaxX; 990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkTileModeProc procX = fTileProcX; 1000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int maxY = fMaxY; 1010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkTileModeProc procY = fTileProcY; 1020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int tmpx = procX(ix, maxX); 1040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int tmpy = procY(iy, maxY); 1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project p00 = bitmap->getAddr32(tmpx, tmpy); 1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int tmpx1 = procX(ix + 1, maxX); 1080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project p01 = bitmap->getAddr32(tmpx1, tmpy); 1090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int tmpy1 = procY(iy + 1, maxY); 1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project p10 = bitmap->getAddr32(tmpx, tmpy1); 1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project p11 = bitmap->getAddr32(tmpx1, tmpy1); 1140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkFilterPtrProc proc = SkGetBilinearFilterPtrProc(fPtrProcTable, x, y); 1170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return proc(p00, p01, p10, p11); 1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 1210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkFilterPtrProc* fPtrProcTable; 1220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass RGB16_Bilinear_Sampler : public SkBitmapSampler { 1250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project RGB16_Bilinear_Sampler(const SkBitmap& bm, SkShader::TileMode tmx, SkShader::TileMode tmy) 1270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project : SkBitmapSampler(bm, true, tmx, tmy) 1280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 1290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fProcTable = SkGetBilinearFilterProcTable(); 1300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual SkPMColor sample(SkFixed x, SkFixed y) const 1330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint16_t *p00, *p01, *p10, *p11; 1350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // turn pixel centers into the top-left of our filter-box 1370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project x -= SK_FixedHalf; 1380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project y -= SK_FixedHalf; 1390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // compute our pointers 1410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 1420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkBitmap* bitmap = &fBitmap; 1430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int ix = x >> 16; 1440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int iy = y >> 16; 1450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int maxX = fMaxX; 1470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkTileModeProc procX = fTileProcX; 1480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int maxY = fMaxY; 1490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkTileModeProc procY = fTileProcY; 1500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int tmpx = procX(ix, maxX); 1520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int tmpy = procY(iy, maxY); 1530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project p00 = bitmap->getAddr16(tmpx, tmpy); 1540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int tmpx1 = procX(ix + 1, maxX); 1560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project p01 = bitmap->getAddr16(tmpx1, tmpy); 1570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int tmpy1 = procY(iy + 1, maxY); 1590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project p10 = bitmap->getAddr16(tmpx, tmpy1); 1600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project p11 = bitmap->getAddr16(tmpx1, tmpy1); 1620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkFilterProc proc = SkGetBilinearFilterProc(fProcTable, x, y); 1650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project uint32_t c = proc(SkExpand_rgb_16(*p00), SkExpand_rgb_16(*p01), 1660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkExpand_rgb_16(*p10), SkExpand_rgb_16(*p11)); 1670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkPixel16ToPixel32((uint16_t)SkCompact_rgb_16(c)); 1690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 1720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkFilterProc* fProcTable; 1730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// If we had a init/term method on sampler, we could avoid the per-pixel 1760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// call to lockColors/unlockColors 1770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass Index8_Bilinear_Sampler : public SkBitmapSampler { 1790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 1800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Index8_Bilinear_Sampler(const SkBitmap& bm, SkShader::TileMode tmx, SkShader::TileMode tmy) 1810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project : SkBitmapSampler(bm, true, tmx, tmy) 1820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 1830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fPtrProcTable = SkGetBilinearFilterPtrProcTable(); 1840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual SkPMColor sample(SkFixed x, SkFixed y) const 1870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 1880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkBitmap* bitmap = &fBitmap; 1890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t *p00, *p01, *p10, *p11; 1910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // turn pixel centers into the top-left of our filter-box 1930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project x -= SK_FixedHalf; 1940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project y -= SK_FixedHalf; 1950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // compute our pointers 1970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 1980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int ix = x >> 16; 1990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int iy = y >> 16; 2000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int maxX = fMaxX; 2020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkTileModeProc procX = fTileProcX; 2030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int maxY = fMaxY; 2040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkTileModeProc procY = fTileProcY; 2050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int tmpx = procX(ix, maxX); 2070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int tmpy = procY(iy, maxY); 2080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project p00 = bitmap->getAddr8(tmpx, tmpy); 2090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int tmpx1 = procX(ix + 1, maxX); 2110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project p01 = bitmap->getAddr8(tmpx1, tmpy); 2120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int tmpy1 = procY(iy + 1, maxY); 2140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project p10 = bitmap->getAddr8(tmpx, tmpy1); 2150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project p11 = bitmap->getAddr8(tmpx1, tmpy1); 2170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkPMColor* colors = bitmap->getColorTable()->lockColors(); 2200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkFilterPtrProc proc = SkGetBilinearFilterPtrProc(fPtrProcTable, x, y); 2220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project uint32_t c = proc(&colors[*p00], &colors[*p01], &colors[*p10], &colors[*p11]); 2230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project bitmap->getColorTable()->unlockColors(false); 2250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return c; 2270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 2300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkFilterPtrProc* fPtrProcTable; 2310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 2320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass A8_Bilinear_Sampler : public SkBitmapSampler { 2340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 2350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project A8_Bilinear_Sampler(const SkBitmap& bm, SkShader::TileMode tmx, SkShader::TileMode tmy) 2360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project : SkBitmapSampler(bm, true, tmx, tmy) 2370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 2380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fProcTable = SkGetBilinearFilterProcTable(); 2390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void setPaint(const SkPaint& paint) 2420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 2430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fColor = SkPreMultiplyColor(paint.getColor()); 2440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual SkPMColor sample(SkFixed x, SkFixed y) const 2470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 2480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t *p00, *p01, *p10, *p11; 2490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // turn pixel centers into the top-left of our filter-box 2510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project x -= SK_FixedHalf; 2520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project y -= SK_FixedHalf; 2530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // compute our pointers 2550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 2560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkBitmap* bitmap = &fBitmap; 2570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int ix = x >> 16; 2580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int iy = y >> 16; 2590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int maxX = fMaxX; 2610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkTileModeProc procX = fTileProcX; 2620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int maxY = fMaxY; 2630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkTileModeProc procY = fTileProcY; 2640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int tmpx = procX(ix, maxX); 2660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int tmpy = procY(iy, maxY); 2670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project p00 = bitmap->getAddr8(tmpx, tmpy); 2680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int tmpx1 = procX(ix + 1, maxX); 2700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project p01 = bitmap->getAddr8(tmpx1, tmpy); 2710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int tmpy1 = procY(iy + 1, maxY); 2730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project p10 = bitmap->getAddr8(tmpx, tmpy1); 2740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project p11 = bitmap->getAddr8(tmpx1, tmpy1); 2760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkFilterProc proc = SkGetBilinearFilterProc(fProcTable, x, y); 2790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int alpha = proc(*p00, *p01, *p10, *p11); 2800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkAlphaMulQ(fColor, SkAlpha255To256(alpha)); 2810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 2840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkFilterProc* fProcTable; 2850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPMColor fColor; 2860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 2870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass A8_NoFilter_Sampler : public SkBitmapSampler { 2890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 2900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project A8_NoFilter_Sampler(const SkBitmap& bm, SkShader::TileMode tmx, SkShader::TileMode tmy) 2910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project : SkBitmapSampler(bm, false, tmx, tmy) 2920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 2930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void setPaint(const SkPaint& paint) 2960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 2970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fColor = SkPreMultiplyColor(paint.getColor()); 2980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual SkPMColor sample(SkFixed x, SkFixed y) const 3010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 3020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int ix = SkFixedFloor(x); 3030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int iy = SkFixedFloor(y); 3040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int alpha = *fBitmap.getAddr8(fTileProcX(ix, fMaxX), fTileProcY(iy, fMaxY)); 3060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkAlphaMulQ(fColor, SkAlpha255To256(alpha)); 3070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 3080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 3100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkFilterProc* fProcTable; 3110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPMColor fColor; 3120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 3130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 3150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 3160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkBitmapSampler* SkBitmapSampler::Create(const SkBitmap& bm, bool doFilter, 3180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkShader::TileMode tmx, 3190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkShader::TileMode tmy) 3200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{ 3210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project switch (bm.getConfig()) { 3220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkBitmap::kARGB_8888_Config: 3230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (doFilter) 3240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(ARGB32_Bilinear_Sampler, (bm, tmx, tmy)); 3250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (tmx == tmy) { 3270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project switch (tmx) { 3280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkShader::kClamp_TileMode: 3290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(ARGB32_Point_Clamp_Sampler, (bm)); 3300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkShader::kRepeat_TileMode: 3310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (is_pow2(bm.width()) && is_pow2(bm.height())) 3320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(ARGB32_Point_Repeat_Pow2_Sampler, (bm)); 3330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else 3340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(ARGB32_Point_Repeat_Mod_Sampler, (bm)); 3350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkShader::kMirror_TileMode: 3360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (is_pow2(bm.width()) && is_pow2(bm.height())) 3370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(ARGB32_Point_Mirror_Pow2_Sampler, (bm)); 3380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else 3390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(ARGB32_Point_Mirror_Mod_Sampler, (bm)); 3400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project default: 3411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkDEBUGFAIL("unknown mode"); 3420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 3430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 3440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else { // tmx != tmy 3450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(ARGB32_Point_Sampler, (bm, tmx, tmy)); 3460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 3470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 3480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkBitmap::kRGB_565_Config: 3500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (doFilter) 3510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(RGB16_Bilinear_Sampler, (bm, tmx, tmy)); 3520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (tmx == tmy) { 3540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project switch (tmx) { 3550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkShader::kClamp_TileMode: 3560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(RGB16_Point_Clamp_Sampler, (bm)); 3570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkShader::kRepeat_TileMode: 3580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (is_pow2(bm.width()) && is_pow2(bm.height())) 3590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(RGB16_Point_Repeat_Pow2_Sampler, (bm)); 3600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else 3610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(RGB16_Point_Repeat_Mod_Sampler, (bm)); 3620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkShader::kMirror_TileMode: 3630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (is_pow2(bm.width()) && is_pow2(bm.height())) 3640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(RGB16_Point_Mirror_Pow2_Sampler, (bm)); 3650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else 3660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(RGB16_Point_Mirror_Mod_Sampler, (bm)); 3670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project default: 3681cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkDEBUGFAIL("unknown mode"); 3690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 3700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 3710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else { // tmx != tmy 3720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(RGB16_Point_Sampler, (bm, tmx, tmy)); 3730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 3740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 3750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkBitmap::kIndex8_Config: 3770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (doFilter) 3780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(Index8_Bilinear_Sampler, (bm, tmx, tmy)); 3790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (tmx == tmy) { 3810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project switch (tmx) { 3820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkShader::kClamp_TileMode: 3830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(Index8_Point_Clamp_Sampler, (bm)); 3840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkShader::kRepeat_TileMode: 3850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (is_pow2(bm.width()) && is_pow2(bm.height())) 3860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(Index8_Point_Repeat_Pow2_Sampler, (bm)); 3870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else 3880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(Index8_Point_Repeat_Mod_Sampler, (bm)); 3890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkShader::kMirror_TileMode: 3900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (is_pow2(bm.width()) && is_pow2(bm.height())) 3910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(Index8_Point_Mirror_Pow2_Sampler, (bm)); 3920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else 3930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(Index8_Point_Mirror_Mod_Sampler, (bm)); 3940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project default: 3951cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkDEBUGFAIL("unknown mode"); 3960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 3970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 3980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else { // tmx != tmy 3990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(Index8_Point_Sampler, (bm, tmx, tmy)); 4000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 4010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 4020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 4030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkBitmap::kA8_Config: 4040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (doFilter) 4050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(A8_Bilinear_Sampler, (bm, tmx, tmy)); 4060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else 4070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(A8_NoFilter_Sampler, (bm, tmx, tmy)); 4080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 4090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 4100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project default: 4111cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkDEBUGFAIL("unknown device"); 4120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 4130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(SkNullBitmapSampler, (bm, doFilter, tmx, tmy)); 4140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 4150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 416