📄 pixman-combine.c
字号:
}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 + -