⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fbcompose.c

📁 按照官方的说法:Cairo is a vector graphics library with cross-device output support. 翻译过来
💻 C
📖 第 1 页 / 共 5 页
字号:
        dest[i] = s;    }}static FASTCALL voidfbCombineConjointOverU (CARD32 *dest, const CARD32 *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineAOver);}static FASTCALL voidfbCombineConjointOverReverseU (CARD32 *dest, const CARD32 *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineBOver);}static FASTCALL voidfbCombineConjointInU (CARD32 *dest, const CARD32 *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineAIn);}static FASTCALL voidfbCombineConjointInReverseU (CARD32 *dest, const CARD32 *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineBIn);}static FASTCALL voidfbCombineConjointOutU (CARD32 *dest, const CARD32 *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineAOut);}static FASTCALL voidfbCombineConjointOutReverseU (CARD32 *dest, const CARD32 *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineBOut);}static FASTCALL voidfbCombineConjointAtopU (CARD32 *dest, const CARD32 *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineAAtop);}static FASTCALL voidfbCombineConjointAtopReverseU (CARD32 *dest, const CARD32 *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineBAtop);}static FASTCALL voidfbCombineConjointXorU (CARD32 *dest, const CARD32 *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineXor);}static CombineFuncU fbCombineFuncU[] = {    fbCombineClear,    fbCombineSrcU,    NULL, /* CombineDst */    fbCombineOverU,    fbCombineOverReverseU,    fbCombineInU,    fbCombineInReverseU,    fbCombineOutU,    fbCombineOutReverseU,    fbCombineAtopU,    fbCombineAtopReverseU,    fbCombineXorU,    fbCombineAddU,    fbCombineSaturateU,    NULL,    NULL,    fbCombineClear,    fbCombineSrcU,    NULL, /* CombineDst */    fbCombineDisjointOverU,    fbCombineSaturateU, /* DisjointOverReverse */    fbCombineDisjointInU,    fbCombineDisjointInReverseU,    fbCombineDisjointOutU,    fbCombineDisjointOutReverseU,    fbCombineDisjointAtopU,    fbCombineDisjointAtopReverseU,    fbCombineDisjointXorU,    NULL,    NULL,    NULL,    NULL,    fbCombineClear,    fbCombineSrcU,    NULL, /* CombineDst */    fbCombineConjointOverU,    fbCombineConjointOverReverseU,    fbCombineConjointInU,    fbCombineConjointInReverseU,    fbCombineConjointOutU,    fbCombineConjointOutReverseU,    fbCombineConjointAtopU,    fbCombineConjointAtopReverseU,    fbCombineConjointXorU,};static FASTCALL voidfbCombineMaskC (CARD32 *src, CARD32 *mask, int width){    int i;    for (i = 0; i < width; ++i) {        CARD32 a = mask[i];        CARD32	x;        CARD16	xa;        if (!a)        {            src[i] = 0;            continue;        }        x = src[i];        if (a == 0xffffffff)        {            x = x >> 24;            x |= x << 8;            x |= x << 16;            mask[i] = x;            continue;        }        xa = x >> 24;        FbByteMulC(x, a);        src[i] = x;        FbByteMul(a, xa);        mask[i] = a;    }}static FASTCALL voidfbCombineMaskValueC (CARD32 *src, const CARD32 *mask, int width){    int i;    for (i = 0; i < width; ++i) {        CARD32 a = mask[i];        CARD32	x;        if (!a)        {            src[i] = 0;            continue;        }        if (a == 0xffffffff)            continue;        x = src[i];        FbByteMulC(x, a);        src[i] = x;    }}static FASTCALL voidfbCombineMaskAlphaC (const CARD32 *src, CARD32 *mask, int width){    int i;    for (i = 0; i < width; ++i) {        CARD32 a = mask[i];        CARD32	x;        if (!a)            continue;        x = src[i] >> 24;        if (x == 0xff)            continue;        if (a == 0xffffffff)        {            x = x >> 24;            x |= x << 8;            x |= x << 16;            mask[i] = x;            continue;        }        FbByteMul(a, x);        mask[i] = a;    }}static FASTCALL voidfbCombineClearC (CARD32 *dest, CARD32 *src, CARD32 *mask, int width){    memset(dest, 0, width*sizeof(CARD32));}static FASTCALL voidfbCombineSrcC (CARD32 *dest, CARD32 *src, CARD32 *mask, int width){    fbCombineMaskValueC(src, mask, width);    memcpy(dest, src, width*sizeof(CARD32));}static FASTCALL voidfbCombineOverC (CARD32 *dest, CARD32 *src, CARD32 *mask, int width){    int i;    fbCombineMaskC(src, mask, width);    for (i = 0; i < width; ++i) {        CARD32  s = src[i];        CARD32  a = ~mask[i];        if (a != 0xffffffff)        {            if (a)            {                CARD32 d = dest[i];                FbByteMulAddC(d, a, s);                s = d;            }            dest[i] = s;        }    }}static FASTCALL voidfbCombineOverReverseC (CARD32 *dest, CARD32 *src, CARD32 *mask, int width){    int i;    fbCombineMaskValueC(src, mask, width);    for (i = 0; i < width; ++i) {        CARD32 d = dest[i];        CARD32 a = ~d >> 24;        if (a)        {            CARD32 s = src[i];            if (a != 0xff)            {                FbByteMulAdd(s, a, d);            }            dest[i] = s;        }    }}static FASTCALL voidfbCombineInC (CARD32 *dest, CARD32 *src, CARD32 *mask, int width){    int i;    fbCombineMaskValueC(src, mask, width);    for (i = 0; i < width; ++i) {        CARD32 d = dest[i];        CARD16 a = d >> 24;        CARD32 s = 0;        if (a)        {            s = src[i];            if (a != 0xff)            {                FbByteMul(s, a);            }        }        dest[i] = s;    }}static FASTCALL voidfbCombineInReverseC (CARD32 *dest, CARD32 *src, CARD32 *mask, int width){    int i;    fbCombineMaskAlphaC(src, mask, width);    for (i = 0; i < width; ++i) {        CARD32 a = mask[i];        if (a != 0xffffffff)        {            CARD32 d = 0;            if (a)            {                d = dest[i];                FbByteMulC(d, a);            }            dest[i] = d;        }    }}static FASTCALL voidfbCombineOutC (CARD32 *dest, CARD32 *src, CARD32 *mask, int width){    int i;    fbCombineMaskValueC(src, mask, width);    for (i = 0; i < width; ++i) {        CARD32 d = dest[i];        CARD16 a = ~d >> 24;        CARD32 s = 0;        if (a)        {            s = src[i];            if (a != 0xff)            {                FbByteMul(s, a);            }        }        dest[i] = s;    }}static FASTCALL voidfbCombineOutReverseC (CARD32 *dest, CARD32 *src, CARD32 *mask, int width){    int i;    fbCombineMaskAlphaC(src, mask, width);    for (i = 0; i < width; ++i) {        CARD32 a = ~mask[i];        if (a != 0xffffffff)        {            CARD32 d = 0;            if (a)            {                d = dest[i];                FbByteMulC(d, a);            }            dest[i] = d;        }    }}static FASTCALL voidfbCombineAtopC (CARD32 *dest, CARD32 *src, CARD32 *mask, int width){    int i;    fbCombineMaskC(src, mask, width);    for (i = 0; i < width; ++i) {        CARD32 d = dest[i];        CARD32 s = src[i];        CARD32 ad = ~mask[i];        CARD16 as = d >> 24;        FbByteAddMulC(d, ad, s, as);        dest[i] = d;    }}static FASTCALL voidfbCombineAtopReverseC (CARD32 *dest, CARD32 *src, CARD32 *mask, int width){    int i;    fbCombineMaskC(src, mask, width);    for (i = 0; i < width; ++i) {        CARD32 d = dest[i];        CARD32 s = src[i];        CARD32 ad = mask[i];        CARD16 as = ~d >> 24;        FbByteAddMulC(d, ad, s, as);        dest[i] = d;    }}static FASTCALL voidfbCombineXorC (CARD32 *dest, CARD32 *src, CARD32 *mask, int width){    int i;    fbCombineMaskC(src, mask, width);    for (i = 0; i < width; ++i) {        CARD32 d = dest[i];        CARD32 s = src[i];        CARD32 ad = ~mask[i];        CARD16 as = ~d >> 24;        FbByteAddMulC(d, ad, s, as);        dest[i] = d;    }}static FASTCALL voidfbCombineAddC (CARD32 *dest, CARD32 *src, CARD32 *mask, int width){    int i;    fbCombineMaskValueC(src, mask, width);    for (i = 0; i < width; ++i) {        CARD32 s = src[i];        CARD32 d = dest[i];        FbByteAdd(d, s);        dest[i] = d;    }}static FASTCALL voidfbCombineSaturateC (CARD32 *dest, CARD32 *src, CARD32 *mask, int width){    int i;    fbCombineMaskC(src, mask, width);    for (i = 0; i < width; ++i) {        CARD32  s, d;        CARD16  sa, sr, sg, sb, da;        CARD16  t, u, v;        CARD32  m,n,o,p;        d = dest[i];        s = src[i];        sa = (mask[i] >> 24);        sr = (mask[i] >> 16) & 0xff;        sg = (mask[i] >>  8) & 0xff;        sb = (mask[i]      ) & 0xff;        da = ~d >> 24;        if (sb <= da)            m = FbAdd(s,d,0,t);        else            m = FbGen (s, d, 0, (da << 8) / sb, 0xff, t, u, v);        if (sg <= da)            n = FbAdd(s,d,8,t);        else            n = FbGen (s, d, 8, (da << 8) / sg, 0xff, t, u, v);        if (sr <= da)            o = FbAdd(s,d,16,t);        else            o = FbGen (s, d, 16, (da << 8) / sr, 0xff, t, u, v);        if (sa <= da)            p = FbAdd(s,d,24,t);        else            p = FbGen (s, d, 24, (da << 8) / sa, 0xff, t, u, v);        dest[i] = m|n|o|p;    }}static FASTCALL voidfbCombineDisjointGeneralC (CARD32 *dest, CARD32 *src, CARD32 *mask, int width, CARD8 combine){    int i;    fbCombineMaskC(src, mask, width);    for (i = 0; i < width; ++i) {        CARD32  s, d;        CARD32  m,n,o,p;        CARD32  Fa, Fb;        CARD16  t, u, v;        CARD32  sa;        CARD8   da;        s = src[i];        sa = mask[i];        d = dest[i];        da = d >> 24;        switch (combine & CombineA) {        default:            Fa = 0;            break;        case CombineAOut:            m = fbCombineDisjointOutPart ((CARD8) (sa >> 0), da);            n = fbCombineDisjointOutPart ((CARD8) (sa >> 8), da) << 8;            o = fbCombineDisjointOutPart ((CARD8) (sa >> 16), da) << 16;            p = fbCombineDisjointOutPart ((CARD8) (sa >> 24), da) << 24;            Fa = m|n|o|p;            break;        case CombineAIn:            m = fbCombineDisjointInPart ((CARD8) (sa >> 0), da);            n = fbCombineDisjointInPart ((CARD8) (sa >> 8), da) << 8;            o = fbCombineDisjointInPart ((CARD8) (sa >> 16), da) << 16;            p = fbCombineDisjointInPart ((CARD8) (sa >> 24), da) << 24;            Fa = m|n|o|p;            break;        case CombineA:            Fa = 0xffffffff;            break;        }        switch (combine & CombineB) {        default:            Fb = 0;            break;        case CombineBOut:            m = fbCombineDisjointOutPart (da, (CARD8) (sa >> 0));            n = fbCombineDisjointOutPart (da, (CARD8) (sa >> 8)) << 8;            o = fbCombineDisjointOutPart (da, (CARD8) (sa >> 16)) << 16;            p = fbCombineDisjointOutPart (da, (CARD8) (sa >> 24)) << 24;            Fb = m|n|o|p;            break;        case CombineBIn:            m = fbCombineDisjointInPart (da, (CARD8) (sa >> 0));            n = fbCombineDisjointInPart (da, (CARD

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -