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