📄 fbcompose.c
字号:
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 + -