📄 cfbsolid.c
字号:
#if RROP == GXset *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000); pdst++; *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); pdst++; *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); pdst--;#endif pdst--; break; case 2:#if RROP == GXcopy *pdst++ = ((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000); *pdst-- = piQxelXor[2];#endif#if RROP == GXxor *pdst++ ^= (piQxelXor[1] & 0xFFFF0000); *pdst-- ^= piQxelXor[2];#endif#if RROP == GXand *pdst++ &= (piQxelAnd[1] | 0xFFFF); *pdst-- &= piQxelAnd[2];#endif#if RROP == GXor *pdst++ |= (piQxelOr[1] & 0xFFFF0000); *pdst-- |= piQxelOr[2];#endif#if RROP == GXset *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000); pdst++; *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); pdst--;#endif break; case 3:#if RROP == GXcopy *pdst = ((*pdst) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00);#endif#if RROP == GXxor *pdst ^= (piQxelXor[2] & 0xFFFFFF00);#endif#if RROP == GXand *pdst &= (piQxelAnd[2] | 0xFF);#endif#if RROP == GXor *pdst |= (piQxelOr[2] & 0xFFFFFF00);#endif#if RROP == GXset *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFFFFFF00);#endif break; } break; case 3: switch(leftIndex){ case 0:#if RROP == GXcopy *pdst++ = piQxelXor[0]; *pdst++ = piQxelXor[1]; *pdst-- = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);#endif#if RROP == GXxor *pdst++ ^= piQxelXor[0]; *pdst++ ^= piQxelXor[1]; *pdst-- ^= (piQxelXor[2] & 0xFF);#endif#if RROP == GXand *pdst++ &= piQxelAnd[0]; *pdst++ &= piQxelAnd[1]; *pdst-- &= (piQxelAnd[2] | 0xFFFFFF00);#endif#if RROP == GXor *pdst++ |= piQxelOr[0]; *pdst++ |= piQxelOr[1]; *pdst-- |= (piQxelOr[2] & 0xFF);#endif#if RROP == GXset *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); pdst++; *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); pdst++; *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF); pdst--;#endif pdst--; break; case 1:#if RROP == GXcopy *pdst++ = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); *pdst++ = piQxelXor[1]; *pdst-- = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);#endif#if RROP == GXxor *pdst++ ^= (piQxelXor[0] & 0xFF000000); *pdst++ ^= piQxelXor[1]; *pdst-- ^= (piQxelXor[2] & 0xFF);#endif#if RROP == GXand *pdst++ &= (piQxelAnd[0] | 0x00FFFFFF); *pdst++ &= piQxelAnd[1]; *pdst-- &= (piQxelAnd[2] | 0xFFFFFF00);#endif#if RROP == GXor *pdst++ |= (piQxelOr[0] & 0xFF000000); *pdst++ |= piQxelOr[1]; *pdst-- |= (piQxelOr[2] & 0xFF);#endif#if RROP == GXset *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000); pdst++; *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); pdst++; *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF); pdst--;#endif pdst--; break; case 2:/* pdst++;*/#if RROP == GXcopy *pdst++ = ((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000); *pdst-- = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);#endif#if RROP == GXxor *pdst++ ^= (piQxelXor[1] & 0xFFFF0000); *pdst-- ^= (piQxelXor[2] & 0xFF);#endif#if RROP == GXand *pdst++ &= (piQxelAnd[1] | 0xFFFF); *pdst-- &= (piQxelAnd[2] | 0xFFFFFF00);#endif#if RROP == GXor *pdst++ |= (piQxelOr[1] & 0xFFFF0000); *pdst-- |= (piQxelOr[2] & 0xFF);#endif#if RROP == GXset *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000); pdst++; *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF); pdst--;#endif break; } break; case 2: /* leftIndex + w = 2*/ if(leftIndex){#if RROP == GXcopy *pdst++ = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); *pdst-- = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);#endif#if RROP == GXxor *pdst++ ^= (piQxelXor[0] & 0xFF000000); *pdst-- ^= (piQxelXor[1] & 0xFFFF);#endif#if RROP == GXand *pdst++ &= (piQxelAnd[0] | 0xFFFFFF); *pdst-- &= (piQxelAnd[1] | 0xFFFF0000);#endif#if RROP == GXor *pdst++ |= (piQxelOr[0] & 0xFF000000); *pdst-- |= (piQxelOr[1] & 0xFFFF);#endif#if RROP == GXset *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000); pdst++; *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF); pdst--;#endif } else{ /*case 2 leftIndex === 0 */#if RROP == GXcopy *pdst++ = piQxelXor[0]; *pdst-- = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);#endif#if RROP == GXxor *pdst++ ^= piQxelXor[0]; *pdst-- ^= (piQxelXor[1] & 0xFFFF);#endif#if RROP == GXand *pdst++ &= piQxelAnd[0]; *pdst-- &= (piQxelAnd[1] | 0xFFFF0000);#endif#if RROP == GXor *pdst++ |= piQxelOr[0]; *pdst-- |= (piQxelOr[1] & 0xFFFF);#endif#if RROP == GXset *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); pdst++; *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF); pdst--;#endif } break; case 1: /*only if leftIndex = 0 and w = 1*/#if RROP == GXcopy *pdst = ((*pdst) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF);#endif#if RROP == GXxor *pdst ^= (piQxelXor[0] & 0xFFFFFF);#endif#if RROP == GXand *pdst &= (piQxelAnd[0] | 0xFF000000);#endif#if RROP == GXor *pdst |= (piQxelOr[0] & 0xFFFFFF);#endif#if RROP == GXset *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFFFFFF);#endif break; case 0: /*never*/ break; default: { switch(leftIndex){ case 0: break; case 1:#if RROP == GXcopy *pdst++ = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); *pdst++ = piQxelXor[1]; *pdst++ = piQxelXor[2];#endif#if RROP == GXxor *pdst++ ^= (piQxelXor[0] & 0xFF000000); *pdst++ ^= piQxelXor[1]; *pdst++ ^= piQxelXor[2];#endif#if RROP == GXand *pdst++ &= (piQxelAnd[0] | 0xFFFFFF); *pdst++ &= piQxelAnd[1]; *pdst++ &= piQxelAnd[2];#endif#if RROP == GXor *pdst++ |= (piQxelOr[0] & 0xFF000000); *pdst++ |= piQxelOr[1]; *pdst++ |= piQxelOr[2];#endif#if RROP == GXset *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000); pdst++; *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); pdst++; *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); pdst++;#endif break; case 2:#if RROP == GXcopy *pdst++ = (((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000)); *pdst++ = piQxelXor[2];#endif#if RROP == GXxor *pdst++ ^=(piQxelXor[1] & 0xFFFF0000); *pdst++ ^= piQxelXor[2];#endif#if RROP == GXand *pdst++ &= (piQxelAnd[1] | 0xFFFF); *pdst++ &= piQxelAnd[2];#endif#if RROP == GXor *pdst++ |= (piQxelOr[1] & 0xFFFF0000); *pdst++ |= piQxelOr[2];#endif#if RROP == GXset *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000); pdst++; *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); pdst++;#endif break; case 3:#if RROP == GXcopy *pdst++ = ((*pdst) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00);#endif#if RROP == GXxor *pdst++ ^= (piQxelXor[2] & 0xFFFFFF00);#endif#if RROP == GXand *pdst++ &= (piQxelAnd[2] | 0xFF);#endif#if RROP == GXor *pdst++ |= (piQxelOr[2] & 0xFFFFFF00);#endif#if RROP == GXset *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFFFFFF00); pdst++;#endif break; } while(nlmiddle--){#if RROP == GXcopy *pdst++ = piQxelXor[0]; *pdst++ = piQxelXor[1]; *pdst++ = piQxelXor[2];#endif#if RROP == GXxor *pdst++ ^= piQxelXor[0]; *pdst++ ^= piQxelXor[1]; *pdst++ ^= piQxelXor[2];#endif#if RROP == GXand *pdst++ &= piQxelAnd[0]; *pdst++ &= piQxelAnd[1]; *pdst++ &= piQxelAnd[2];#endif#if RROP == GXor *pdst++ |= piQxelOr[0]; *pdst++ |= piQxelOr[1]; *pdst++ |= piQxelOr[2];#endif#if RROP == GXset *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); pdst++; *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); pdst++; *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); pdst++;#endif } switch(rightIndex){ case 0: break; case 1:#if RROP == GXcopy *pdst++ = ((*pdst) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF);#endif#if RROP == GXxor *pdst++ ^= (piQxelXor[0] & 0xFFFFFF);#endif#if RROP == GXand *pdst++ &= (piQxelAnd[0] | 0xFF);#endif#if RROP == GXor *pdst++ |= (piQxelOr[0] & 0xFFFFFF);#endif#if RROP == GXset *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFFFFFF);#endif break; case 2:#if RROP == GXcopy *pdst++ = piQxelXor[0]; *pdst++ = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);#endif#if RROP == GXxor *pdst++ ^= piQxelXor[0]; *pdst++ ^= (piQxelXor[1] & 0xFFFF);#endif#if RROP == GXand *pdst++ &= piQxelAnd[0]; *pdst++ &= (piQxelAnd[1] | 0xFFFF0000);#endif#if RROP == GXor *pdst++ |= piQxelOr[0]; *pdst++ |= (piQxelOr[1] & 0xFFFF);#endif#if RROP == GXset *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); *pdst++; *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF); *pdst++;#endif break; case 3:#if RROP == GXcopy *pdst++ = piQxelXor[0]; *pdst++ = piQxelXor[1]; *pdst++ = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);#endif#if RROP == GXxor *pdst++ ^= piQxelXor[0]; *pdst++ ^= piQxelXor[1]; *pdst++ ^= (piQxelXor[2] & 0xFF);#endif#if RROP == GXand *pdst++ &= piQxelAnd[0]; *pdst++ &= piQxelAnd[1]; *pdst++ &= (piQxelAnd[2] | 0xFFFFFF00);#endif#if RROP == GXor *pdst++ |= piQxelOr[0]; *pdst++ |= piQxelOr[1]; *pdst++ |= (piQxelOr[2] & 0xFF);#endif#if RROP == GXset *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); pdst++; *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); pdst++; *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF); pdst++;#endif break; } }}#else#if PSZ == 8 if (w <= PGSZB) { register char *addrb; addrb = ((char *) pdst) + x; while (w--) { RROP_SOLID (addrb); addrb++; } }#else if ((x & PIM) + w <= PPW) { pdst += x >> PWSH; maskpartialbits (x, w, startmask); RROP_SOLID_MASK (pdst, startmask); }#endif else { pdst += x >> PWSH; maskbits (x, w, startmask, endmask, nlmiddle); if (startmask) { RROP_SOLID_MASK (pdst, startmask); ++pdst; } RROP_SPAN(pdst,nlmiddle) if (endmask) { RROP_SOLID_MASK (pdst, endmask); } }#endif } DEALLOCATE_LOCAL(pptFree); DEALLOCATE_LOCAL(pwidthFree);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -