SkTableColorFilter.cpp revision ba28d03e94dc221d6a803bf2a84a420b9159255c
185a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner#include "SkColorPriv.h" 285a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner#include "SkTableColorFilter.h" 385a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner#include "SkUnPreMultiply.h" 485a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner 585a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattnerclass SkTable_ColorFilter : public SkColorFilter { 685a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattnerpublic: 785a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner SkTable_ColorFilter(const uint8_t tableA[], const uint8_t tableR[], 885a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner const uint8_t tableG[], const uint8_t tableB[]) { 985a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner fBitmap = NULL; 1085a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner fFlags = 0; 1185a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner 1285a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner uint8_t* dst = fStorage; 1385a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner if (tableA) { 142d88708cbe4e4ec5e04e4acb6bd7f5be68557379John McCall memcpy(dst, tableA, 256); 15e737f5041a36d0befb39ffeed8d50ba15916d3daDouglas Gregor dst += 256; 165f1e0942a32657b625702aa52f82430d0120f424John McCall fFlags |= kA_Flag; 1726743b20e4a8c2a986e6453f0c38beba0afef633John McCall } 18e737f5041a36d0befb39ffeed8d50ba15916d3daDouglas Gregor if (tableR) { 1985a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner memcpy(dst, tableR, 256); 2085a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner dst += 256; 21f494b579b22f9950f5af021f0bf9879a91bb8b41Steve Naroff fFlags |= kR_Flag; 22f85e193739c953358c865005855253af4f68a497John McCall } 232725ca8eb3354975ca77ed4b88ede7b60b216b9aDouglas Gregor if (tableG) { 2439c28bbbf235533e9ae7d06fb9b13371dfcc542dChris Lattner memcpy(dst, tableG, 256); 2561f72cbd037e58f12cfe90cd442373f44092f030Steve Naroff dst += 256; 2661f72cbd037e58f12cfe90cd442373f44092f030Steve Naroff fFlags |= kG_Flag; 2785a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner } 2826743b20e4a8c2a986e6453f0c38beba0afef633John McCall if (tableB) { 2985a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner memcpy(dst, tableB, 256); 30f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCall fFlags |= kB_Flag; 31f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCall } 32f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCall } 3339c28bbbf235533e9ae7d06fb9b13371dfcc542dChris Lattner 3439c28bbbf235533e9ae7d06fb9b13371dfcc542dChris Lattner virtual bool asComponentTable(SkBitmap* table) SK_OVERRIDE; 35f4b136fb40aeedeaaa6ce7cdff22f375eb76c47bChris Lattner 36f4b136fb40aeedeaaa6ce7cdff22f375eb76c47bChris Lattner virtual void filterSpan(const SkPMColor src[], int count, 37f4b136fb40aeedeaaa6ce7cdff22f375eb76c47bChris Lattner SkPMColor dst[]) SK_OVERRIDE; 38f4b136fb40aeedeaaa6ce7cdff22f375eb76c47bChris Lattner virtual void flatten(SkFlattenableWriteBuffer&) SK_OVERRIDE; 3939c28bbbf235533e9ae7d06fb9b13371dfcc542dChris Lattner 401eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkTable_ColorFilter) 41f4b136fb40aeedeaaa6ce7cdff22f375eb76c47bChris Lattner 42f4b136fb40aeedeaaa6ce7cdff22f375eb76c47bChris Lattnerprotected: 4385a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner SkTable_ColorFilter(SkFlattenableReadBuffer& buffer); 4439c28bbbf235533e9ae7d06fb9b13371dfcc542dChris Lattner 4539c28bbbf235533e9ae7d06fb9b13371dfcc542dChris Lattnerprivate: 461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SkBitmap* fBitmap; 47726e168dc09fb23f53c7b004f8e919421ee91806Chris Lattner 4839c28bbbf235533e9ae7d06fb9b13371dfcc542dChris Lattner enum { 491eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump kA_Flag = 1 << 0, 5039c28bbbf235533e9ae7d06fb9b13371dfcc542dChris Lattner kR_Flag = 1 << 1, 51f4b136fb40aeedeaaa6ce7cdff22f375eb76c47bChris Lattner kG_Flag = 1 << 2, 52f4b136fb40aeedeaaa6ce7cdff22f375eb76c47bChris Lattner kB_Flag = 1 << 3, 53f4b136fb40aeedeaaa6ce7cdff22f375eb76c47bChris Lattner }; 54f4b136fb40aeedeaaa6ce7cdff22f375eb76c47bChris Lattner uint8_t fStorage[256 * 4]; 55f4b136fb40aeedeaaa6ce7cdff22f375eb76c47bChris Lattner unsigned fFlags; 561eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 572f4eaef37476ae6891ede8ba215d0f6fd093629bBenjamin Kramer typedef SkColorFilter INHERITED; 582f4eaef37476ae6891ede8ba215d0f6fd093629bBenjamin Kramer}; 591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 6039c28bbbf235533e9ae7d06fb9b13371dfcc542dChris Lattnerstatic const uint8_t gIdentityTable[] = { 6139c28bbbf235533e9ae7d06fb9b13371dfcc542dChris Lattner 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 6285a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 631eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 6439c28bbbf235533e9ae7d06fb9b13371dfcc542dChris Lattner 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 6539c28bbbf235533e9ae7d06fb9b13371dfcc542dChris Lattner 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 663e2193ce5feb2feb092e5ae615e85148e06e9fd2Anders Carlsson 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 673e2193ce5feb2feb092e5ae615e85148e06e9fd2Anders Carlsson 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 682085fd6cd22ec5c268175251db10d7c60caf7aaaChris Lattner 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 6939c28bbbf235533e9ae7d06fb9b13371dfcc542dChris Lattner 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 7085a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 72690398188ea5b428f06aa13c7d4ce6eb741ad4f9Chris Lattner 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 73690398188ea5b428f06aa13c7d4ce6eb741ad4f9Chris Lattner 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 7485a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 75a0af1fe67da29343cd182c51cd48d91b740ecef2Chris Lattner 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 76a0af1fe67da29343cd182c51cd48d91b740ecef2Chris Lattner 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 77d9fd7647e286723d100db4cfeab31ec022eec629Steve Naroff 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 78d9fd7647e286723d100db4cfeab31ec022eec629Steve Naroff 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 79d9fd7647e286723d100db4cfeab31ec022eec629Steve Naroff 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 80a0af1fe67da29343cd182c51cd48d91b740ecef2Chris Lattner 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 81a0af1fe67da29343cd182c51cd48d91b740ecef2Chris Lattner 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 8214108da7f7fc059772711e4ffee1322a27b152a7Steve Naroff 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 838a4377697161c5087e27cc40d6e0682f0cd1fa20Fariborz Jahanian 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 844c73307c74764ba99e1379677fe92af72f676531Fariborz Jahanian 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 854c73307c74764ba99e1379677fe92af72f676531Fariborz Jahanian 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 864c73307c74764ba99e1379677fe92af72f676531Fariborz Jahanian 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 874c73307c74764ba99e1379677fe92af72f676531Fariborz Jahanian 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 884c73307c74764ba99e1379677fe92af72f676531Fariborz Jahanian 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 894c73307c74764ba99e1379677fe92af72f676531Fariborz Jahanian 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 904c73307c74764ba99e1379677fe92af72f676531Fariborz Jahanian 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 914c73307c74764ba99e1379677fe92af72f676531Fariborz Jahanian 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 928a4377697161c5087e27cc40d6e0682f0cd1fa20Fariborz Jahanian 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF 938a4377697161c5087e27cc40d6e0682f0cd1fa20Fariborz Jahanian}; 948a4377697161c5087e27cc40d6e0682f0cd1fa20Fariborz Jahanian 958a4377697161c5087e27cc40d6e0682f0cd1fa20Fariborz Jahanianvoid SkTable_ColorFilter::filterSpan(const SkPMColor src[], int count, 968a4377697161c5087e27cc40d6e0682f0cd1fa20Fariborz Jahanian SkPMColor dst[]) { 978a4377697161c5087e27cc40d6e0682f0cd1fa20Fariborz Jahanian const uint8_t* table = fStorage; 988a4377697161c5087e27cc40d6e0682f0cd1fa20Fariborz Jahanian const uint8_t* tableA = gIdentityTable; 998a4377697161c5087e27cc40d6e0682f0cd1fa20Fariborz Jahanian const uint8_t* tableR = gIdentityTable; 1008a4377697161c5087e27cc40d6e0682f0cd1fa20Fariborz Jahanian const uint8_t* tableG = gIdentityTable; 1018a4377697161c5087e27cc40d6e0682f0cd1fa20Fariborz Jahanian const uint8_t* tableB = gIdentityTable; 1028a4377697161c5087e27cc40d6e0682f0cd1fa20Fariborz Jahanian if (fFlags & kA_Flag) { 1038a4377697161c5087e27cc40d6e0682f0cd1fa20Fariborz Jahanian tableA = table; table += 256; 1048a4377697161c5087e27cc40d6e0682f0cd1fa20Fariborz Jahanian } 10513fd7e5111032f54b538dd66d035b0ccc1f82467Chris Lattner if (fFlags & kR_Flag) { 106d9fd7647e286723d100db4cfeab31ec022eec629Steve Naroff tableR = table; table += 256; 107c83c6874e3bf1432d3df5e8d3530f8561ff5441fDouglas Gregor } 108c83c6874e3bf1432d3df5e8d3530f8561ff5441fDouglas Gregor if (fFlags & kG_Flag) { 109a0af1fe67da29343cd182c51cd48d91b740ecef2Chris Lattner tableG = table; table += 256; 110a0af1fe67da29343cd182c51cd48d91b740ecef2Chris Lattner } 111a0af1fe67da29343cd182c51cd48d91b740ecef2Chris Lattner if (fFlags & kB_Flag) { 11214108da7f7fc059772711e4ffee1322a27b152a7Steve Naroff tableB = table; 113a0af1fe67da29343cd182c51cd48d91b740ecef2Chris Lattner } 114d9fd7647e286723d100db4cfeab31ec022eec629Steve Naroff 115a0af1fe67da29343cd182c51cd48d91b740ecef2Chris Lattner const SkUnPreMultiply::Scale* scaleTable = SkUnPreMultiply::GetScaleTable(); 116a0af1fe67da29343cd182c51cd48d91b740ecef2Chris Lattner for (int i = 0; i < count; ++i) { 117a0af1fe67da29343cd182c51cd48d91b740ecef2Chris Lattner SkPMColor c = src[i]; 11813fd7e5111032f54b538dd66d035b0ccc1f82467Chris Lattner unsigned a, r, g, b; 1191eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump if (0 == c) { 120f4b136fb40aeedeaaa6ce7cdff22f375eb76c47bChris Lattner a = r = g = b = 0; 12185a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner } else { 12285a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner a = SkGetPackedA32(c); 1233b5904ba83fc9b968b1cd6f1ce78d01bfd6e8686Argyrios Kyrtzidis r = SkGetPackedR32(c); 12481d3466d037dc5844234c7a93dab21a6ad986e7dDouglas Gregor g = SkGetPackedG32(c); 125fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlsson b = SkGetPackedB32(c); 12681d3466d037dc5844234c7a93dab21a6ad986e7dDouglas Gregor 127fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlsson if (a < 255) { 1281eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SkUnPreMultiply::Scale scale = scaleTable[a]; 129fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlsson r = SkUnPreMultiply::ApplyScale(scale, r); 130fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlsson g = SkUnPreMultiply::ApplyScale(scale, g); 1316c91615e5d67d59e752037beb475c4b827431172Fariborz Jahanian b = SkUnPreMultiply::ApplyScale(scale, b); 1326c91615e5d67d59e752037beb475c4b827431172Fariborz Jahanian } 1333b5904ba83fc9b968b1cd6f1ce78d01bfd6e8686Argyrios Kyrtzidis } 1343b5904ba83fc9b968b1cd6f1ce78d01bfd6e8686Argyrios Kyrtzidis dst[i] = SkPremultiplyARGBInline(tableA[a], tableR[r], 1353b5904ba83fc9b968b1cd6f1ce78d01bfd6e8686Argyrios Kyrtzidis tableG[g], tableB[b]); 1363b5904ba83fc9b968b1cd6f1ce78d01bfd6e8686Argyrios Kyrtzidis } 1373b5904ba83fc9b968b1cd6f1ce78d01bfd6e8686Argyrios Kyrtzidis} 138fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlsson 139fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlssonstatic const uint8_t gCountNibBits[] = { 140fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlsson 0, 1, 1, 2, 141fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlsson 1, 2, 2, 3, 142fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlsson 1, 2, 2, 3, 143fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlsson 2, 3, 3, 4 144fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlsson}; 1454b7a834e0fecddd9eaf1f4567867c718e4eebf50John McCall 146fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlsson#include "SkPackBits.h" 147fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlsson 148fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlssonvoid SkTable_ColorFilter::flatten(SkFlattenableWriteBuffer& buffer) { 149fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlsson this->INHERITED::flatten(buffer); 1501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15181d3466d037dc5844234c7a93dab21a6ad986e7dDouglas Gregor uint8_t storage[5*256]; 152fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlsson int count = gCountNibBits[fFlags & 0xF]; 153fc0f021b492cf28ee7b3a6bd4445ae569e6f15deAnders Carlsson size_t size = SkPackBits::Pack8(fStorage, count * 256, storage); 154f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCall SkASSERT(size <= sizeof(storage)); 155f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCall 156f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCall// SkDebugf("raw %d packed %d\n", count * 256, size); 157f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCall 158f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCall buffer.writeInt(fFlags); 159e8661906d49ef6c9694a9cc845ca62a85dbc016dArgyrios Kyrtzidis buffer.writeInt(size); 16081d3466d037dc5844234c7a93dab21a6ad986e7dDouglas Gregor buffer.write(storage, size); 16181d3466d037dc5844234c7a93dab21a6ad986e7dDouglas Gregor} 16281d3466d037dc5844234c7a93dab21a6ad986e7dDouglas Gregor 16381d3466d037dc5844234c7a93dab21a6ad986e7dDouglas GregorSkTable_ColorFilter::SkTable_ColorFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { 16481d3466d037dc5844234c7a93dab21a6ad986e7dDouglas Gregor fBitmap = NULL; 16585a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner 16681d3466d037dc5844234c7a93dab21a6ad986e7dDouglas Gregor uint8_t storage[5*256]; 16785a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner 16885a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner fFlags = buffer.readInt(); 169f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCall size_t size = buffer.readInt(); 170f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCall buffer.read(storage, size); 171f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCall 172f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCall size_t raw = SkPackBits::Unpack8(storage, size, fStorage); 173f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCall 1741eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SkASSERT(raw <= sizeof(fStorage)); 1756b308f6dc7d8f1581c52095f435c0e1284b111d8Fariborz Jahanian size_t count = gCountNibBits[fFlags & 0xF]; 1767ff22ded2221f442b1f8ff78172938d04ec8c926Fariborz Jahanian SkASSERT(raw == count * 256); 1777ff22ded2221f442b1f8ff78172938d04ec8c926Fariborz Jahanian} 1787ff22ded2221f442b1f8ff78172938d04ec8c926Fariborz Jahanian 1797ff22ded2221f442b1f8ff78172938d04ec8c926Fariborz Jahanianbool SkTable_ColorFilter::asComponentTable(SkBitmap* table) { 1807ff22ded2221f442b1f8ff78172938d04ec8c926Fariborz Jahanian if (table) { 1817ff22ded2221f442b1f8ff78172938d04ec8c926Fariborz Jahanian if (NULL == fBitmap) { 1823fe104154dd2e8ffb351142d74f308938b5c99bfFariborz Jahanian fBitmap = new SkBitmap; 1833fe104154dd2e8ffb351142d74f308938b5c99bfFariborz Jahanian fBitmap->setConfig(SkBitmap::kA8_Config, 256, 4, 256); 1843fe104154dd2e8ffb351142d74f308938b5c99bfFariborz Jahanian fBitmap->allocPixels(); 1853fe104154dd2e8ffb351142d74f308938b5c99bfFariborz Jahanian memcpy(fBitmap->getAddr8(0, 0), fStorage, 256 * 4); 1863fe104154dd2e8ffb351142d74f308938b5c99bfFariborz Jahanian } 187f85e193739c953358c865005855253af4f68a497John McCall *table = *fBitmap; 188f85e193739c953358c865005855253af4f68a497John McCall } 189f85e193739c953358c865005855253af4f68a497John McCall return true; 190f85e193739c953358c865005855253af4f68a497John McCall} 191f85e193739c953358c865005855253af4f68a497John McCall 192f85e193739c953358c865005855253af4f68a497John McCall/////////////////////////////////////////////////////////////////////////////// 193f85e193739c953358c865005855253af4f68a497John McCall 194f85e193739c953358c865005855253af4f68a497John McCall#ifdef SK_CPU_BENDIAN 195f85e193739c953358c865005855253af4f68a497John McCall#else 196f85e193739c953358c865005855253af4f68a497John McCall #define SK_A32_INDEX (3 - (SK_A32_SHIFT >> 3)) 197f85e193739c953358c865005855253af4f68a497John McCall #define SK_R32_INDEX (3 - (SK_R32_SHIFT >> 3)) 198f85e193739c953358c865005855253af4f68a497John McCall #define SK_G32_INDEX (3 - (SK_G32_SHIFT >> 3)) 199f85e193739c953358c865005855253af4f68a497John McCall #define SK_B32_INDEX (3 - (SK_B32_SHIFT >> 3)) 200f85e193739c953358c865005855253af4f68a497John McCall#endif 201f85e193739c953358c865005855253af4f68a497John McCall 202f85e193739c953358c865005855253af4f68a497John McCall/////////////////////////////////////////////////////////////////////////////// 203f85e193739c953358c865005855253af4f68a497John McCall 204f85e193739c953358c865005855253af4f68a497John McCallSkColorFilter* SkTableColorFilter::Create(const uint8_t table[256]) { 205f85e193739c953358c865005855253af4f68a497John McCall return SkNEW_ARGS(SkTable_ColorFilter, (table, table, table, table)); 206f85e193739c953358c865005855253af4f68a497John McCall} 207f85e193739c953358c865005855253af4f68a497John McCall 208f85e193739c953358c865005855253af4f68a497John McCallSkColorFilter* SkTableColorFilter::CreateARGB(const uint8_t tableA[256], 209f85e193739c953358c865005855253af4f68a497John McCall const uint8_t tableR[256], 210a0af1fe67da29343cd182c51cd48d91b740ecef2Chris Lattner const uint8_t tableG[256], 2116d5a1c28593443f3973ef38f8fa042d59182412dDaniel Dunbar const uint8_t tableB[256]) { 21285a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner return SkNEW_ARGS(SkTable_ColorFilter, (tableA, tableR, tableG, tableB)); 21385a932e26f3c3faae6bad639a6d32e92794dfda9Chris Lattner} 214f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCall 215f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCallSK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkTableColorFilter) 216f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCall SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkTable_ColorFilter) 217f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCallSK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 218f312b1ea179f1c44371f9ee0cd0bc006f612de11John McCall