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

📄 pixman-combine.c

📁 嵌入式图形库
💻 C
📖 第 1 页 / 共 3 页
字号:
}FASTCALL static voidfbCombineConjointGeneralU (uint32_t *dest, const uint32_t *src, int width, uint8_t combine){    int i;    for (i = 0; i < width; ++i) {        uint32_t  s = *(src + i);        uint32_t d = *(dest + i);        uint32_t  m,n,o,p;        uint16_t  Fa, Fb, t, u, v;        uint8_t sa = s >> 24;        uint8_t da = d >> 24;        switch (combine & CombineA) {        default:            Fa = 0;            break;        case CombineAOut:            Fa = fbCombineConjointOutPart (sa, da);            break;        case CombineAIn:            Fa = fbCombineConjointInPart (sa, da);            break;        case CombineA:            Fa = 0xff;            break;        }        switch (combine & CombineB) {        default:            Fb = 0;            break;        case CombineBOut:            Fb = fbCombineConjointOutPart (da, sa);            break;        case CombineBIn:            Fb = fbCombineConjointInPart (da, sa);            break;        case CombineB:            Fb = 0xff;            break;        }        m = FbGen (s,d,0,Fa,Fb,t, u, v);        n = FbGen (s,d,8,Fa,Fb,t, u, v);        o = FbGen (s,d,16,Fa,Fb,t, u, v);        p = FbGen (s,d,24,Fa,Fb,t, u, v);        s = m|n|o|p;	*(dest + i) = s;    }}FASTCALL static voidfbCombineConjointOverU (uint32_t *dest, const uint32_t *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineAOver);}FASTCALL static voidfbCombineConjointOverReverseU (uint32_t *dest, const uint32_t *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineBOver);}FASTCALL static voidfbCombineConjointInU (uint32_t *dest, const uint32_t *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineAIn);}FASTCALL static voidfbCombineConjointInReverseU (uint32_t *dest, const uint32_t *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineBIn);}FASTCALL static voidfbCombineConjointOutU (uint32_t *dest, const uint32_t *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineAOut);}FASTCALL static voidfbCombineConjointOutReverseU (uint32_t *dest, const uint32_t *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineBOut);}FASTCALL static voidfbCombineConjointAtopU (uint32_t *dest, const uint32_t *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineAAtop);}FASTCALL static voidfbCombineConjointAtopReverseU (uint32_t *dest, const uint32_t *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineBAtop);}FASTCALL static voidfbCombineConjointXorU (uint32_t *dest, const uint32_t *src, int width){    fbCombineConjointGeneralU (dest, src, width, CombineXor);}/********************************************************************************//*************************** Per Channel functions ******************************//********************************************************************************/FASTCALL static voidfbCombineMaskC (uint32_t *src, uint32_t *mask){    uint32_t a = *mask;    uint32_t	x;    uint16_t	xa;    if (!a)    {	*(src) = 0;	return;    }    x = *(src);    if (a == 0xffffffff)    {	x = x >> 24;	x |= x << 8;	x |= x << 16;	*(mask) = x;	return;    }    xa = x >> 24;    FbByteMulC(x, a);    *(src) = x;    FbByteMul(a, xa);    *(mask) = a;}FASTCALL static voidfbCombineMaskValueC (uint32_t *src, const uint32_t *mask){    uint32_t a = *mask;    uint32_t	x;    if (!a)    {	*(src) = 0;	return;    }    if (a == 0xffffffff)	return;    x = *(src);    FbByteMulC(x, a);    *(src) =x;}FASTCALL static voidfbCombineMaskAlphaC (const uint32_t *src, uint32_t *mask){    uint32_t a = *(mask);    uint32_t	x;    if (!a)	return;    x = *(src) >> 24;    if (x == 0xff)	return;    if (a == 0xffffffff)    {	x = x >> 24;	x |= x << 8;	x |= x << 16;	*(mask) = x;	return;    }    FbByteMul(a, x);    *(mask) = a;}FASTCALL static voidfbCombineClearC (uint32_t *dest, uint32_t *src, uint32_t *mask, int width){    memset(dest, 0, width*sizeof(uint32_t));}FASTCALL static voidfbCombineSrcC (uint32_t *dest, uint32_t *src, uint32_t *mask, int width){    int i;    for (i = 0; i < width; ++i) {	uint32_t s = *(src + i);	uint32_t m = *(mask + i);	fbCombineMaskValueC (&s, &m);	*(dest) = s;    }}FASTCALL static voidfbCombineOverC (uint32_t *dest, uint32_t *src, uint32_t *mask, int width){    int i;    for (i = 0; i < width; ++i) {	uint32_t s = *(src + i);	uint32_t m = *(mask + i);	uint32_t a;	fbCombineMaskC (&s, &m);	a = ~m;        if (a != 0xffffffff)        {            if (a)            {                uint32_t d = *(dest + i);                FbByteMulAddC(d, a, s);                s = d;            }	    *(dest + i) = s;        }    }}FASTCALL static voidfbCombineOverReverseC (uint32_t *dest, uint32_t *src, uint32_t *mask, int width){    int i;    for (i = 0; i < width; ++i) {        uint32_t d = *(dest + i);        uint32_t a = ~d >> 24;        if (a)        {            uint32_t s = *(src + i);	    uint32_t m = *(mask + i);	    fbCombineMaskValueC (&s, &m);            if (a != 0xff)            {                FbByteMulAdd(s, a, d);            }	    *(dest + i) = s;        }    }}FASTCALL static voidfbCombineInC (uint32_t *dest, uint32_t *src, uint32_t *mask, int width){    int i;    for (i = 0; i < width; ++i) {        uint32_t d = *(dest + i);        uint16_t a = d >> 24;        uint32_t s = 0;        if (a)        {	    uint32_t m = *(mask + i);	    s = *(src + i);	    fbCombineMaskValueC (&s, &m);            if (a != 0xff)            {                FbByteMul(s, a);            }        }	*(dest + i) = s;    }}FASTCALL static voidfbCombineInReverseC (uint32_t *dest, uint32_t *src, uint32_t *mask, int width){    int i;    for (i = 0; i < width; ++i) {        uint32_t s = *(src + i);        uint32_t m = *(mask + i);        uint32_t a;	fbCombineMaskAlphaC (&s, &m);	a = m;        if (a != 0xffffffff)        {            uint32_t d = 0;            if (a)            {                d = *(dest + i);                FbByteMulC(d, a);            }	    *(dest + i) = d;        }    }}FASTCALL static voidfbCombineOutC (uint32_t *dest, uint32_t *src, uint32_t *mask, int width){    int i;    for (i = 0; i < width; ++i) {        uint32_t d = *(dest + i);        uint16_t a = ~d >> 24;        uint32_t s = 0;        if (a)        {	    uint32_t m = *(mask + i);	    s = *(src + i);	    fbCombineMaskValueC (&s, &m);            if (a != 0xff)            {                FbByteMul(s, a);            }        }	*(dest + i) = s;    }}FASTCALL static voidfbCombineOutReverseC (uint32_t *dest, uint32_t *src, uint32_t *mask, int width){    int i;    for (i = 0; i < width; ++i) {	uint32_t s = *(src + i);	uint32_t m = *(mask + i);	uint32_t a;	fbCombineMaskAlphaC (&s, &m);        a = ~m;        if (a != 0xffffffff)        {            uint32_t d = 0;            if (a)            {                d = *(dest + i);                FbByteMulC(d, a);            }	    *(dest + i) = d;        }    }}FASTCALL static voidfbCombineAtopC (uint32_t *dest, uint32_t *src, uint32_t *mask, int width){    int i;    for (i = 0; i < width; ++i) {        uint32_t d = *(dest + i);        uint32_t s = *(src + i);        uint32_t m = *(mask + i);        uint32_t ad;        uint16_t as = d >> 24;	fbCombineMaskC (&s, &m);        ad = ~m;        FbByteAddMulC(d, ad, s, as);	*(dest + i) = d;    }}FASTCALL static voidfbCombineAtopReverseC (uint32_t *dest, uint32_t *src, uint32_t *mask, int width){    int i;    for (i = 0; i < width; ++i) {        uint32_t d = *(dest + i);        uint32_t s = *(src + i);        uint32_t m = *(mask + i);        uint32_t ad;        uint16_t as = ~d >> 24;	fbCombineMaskC (&s, &m);	ad = m;        FbByteAddMulC(d, ad, s, as);	*(dest + i) = d;    }}FASTCALL static voidfbCombineXorC (uint32_t *dest, uint32_t *src, uint32_t *mask, int width){    int i;    for (i = 0; i < width; ++i) {        uint32_t d = *(dest + i);        uint32_t s = *(src + i);        uint32_t m = *(mask + i);        uint32_t ad;        uint16_t as = ~d >> 24;	fbCombineMaskC (&s, &m);

⌨️ 快捷键说明

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