diff options
Diffstat (limited to 'fb/fbsolid.c')
-rw-r--r-- | fb/fbsolid.c | 252 |
1 files changed, 111 insertions, 141 deletions
diff --git a/fb/fbsolid.c b/fb/fbsolid.c index 414378531..cad286a43 100644 --- a/fb/fbsolid.c +++ b/fb/fbsolid.c @@ -29,73 +29,56 @@ #include "fb.h" void -fbSolid (FbBits *dst, - FbStride dstStride, - int dstX, - int bpp, - - int width, - int height, - - FbBits and, - FbBits xor) +fbSolid(FbBits * dst, + FbStride dstStride, + int dstX, int bpp, int width, int height, FbBits and, FbBits xor) { - FbBits startmask, endmask; - int n, nmiddle; - int startbyte, endbyte; + FbBits startmask, endmask; + int n, nmiddle; + int startbyte, endbyte; - if (bpp == 24 && (!FbCheck24Pix(and) || !FbCheck24Pix(xor))) - { - fbSolid24 (dst, dstStride, dstX, width, height, and, xor); - return; + if (bpp == 24 && (!FbCheck24Pix(and) || !FbCheck24Pix(xor))) { + fbSolid24(dst, dstStride, dstX, width, height, and, xor); + return; } dst += dstX >> FB_SHIFT; dstX &= FB_MASK; - FbMaskBitsBytes(dstX, width, and == 0, startmask, startbyte, - nmiddle, endmask, endbyte); + FbMaskBitsBytes(dstX, width, and == 0, startmask, startbyte, + nmiddle, endmask, endbyte); if (startmask) - dstStride--; + dstStride--; dstStride -= nmiddle; - while (height--) - { - if (startmask) - { - FbDoLeftMaskByteRRop(dst,startbyte,startmask,and,xor); - dst++; - } - n = nmiddle; - if (!and) - while (n--) - WRITE(dst++, xor); - else - while (n--) - { - WRITE(dst, FbDoRRop (READ(dst), and, xor)); + while (height--) { + if (startmask) { + FbDoLeftMaskByteRRop(dst, startbyte, startmask, and, xor); + dst++; + } + n = nmiddle; + if (!and) + while (n--) + WRITE(dst++, xor); + else + while (n--) { + WRITE(dst, FbDoRRop(READ(dst), and, xor)); dst++; - } - if (endmask) - FbDoRightMaskByteRRop(dst,endbyte,endmask,and,xor); - dst += dstStride; + } + if (endmask) + FbDoRightMaskByteRRop(dst, endbyte, endmask, and, xor); + dst += dstStride; } } void -fbSolid24 (FbBits *dst, - FbStride dstStride, - int dstX, - - int width, - int height, - - FbBits and, - FbBits xor) +fbSolid24(FbBits * dst, + FbStride dstStride, + int dstX, int width, int height, FbBits and, FbBits xor) { - FbBits startmask, endmask; - FbBits xor0 = 0, xor1 = 0, xor2 = 0; - FbBits and0 = 0, and1 = 0, and2 = 0; - FbBits xorS = 0, andS = 0, xorE = 0, andE = 0; - int n, nmiddle; - int rotS, rot; + FbBits startmask, endmask; + FbBits xor0 = 0, xor1 = 0, xor2 = 0; + FbBits and0 = 0, and1 = 0, and2 = 0; + FbBits xorS = 0, andS = 0, xorE = 0, andE = 0; + int n, nmiddle; + int rotS, rot; dst += dstX >> FB_SHIFT; dstX &= FB_MASK; @@ -103,107 +86,94 @@ fbSolid24 (FbBits *dst, * Rotate pixel values this far across the word to align on * screen pixel boundaries */ - rot = FbFirst24Rot (dstX); - FbMaskBits (dstX, width, startmask, nmiddle, endmask); + rot = FbFirst24Rot(dstX); + FbMaskBits(dstX, width, startmask, nmiddle, endmask); if (startmask) - dstStride--; + dstStride--; dstStride -= nmiddle; - + /* * Precompute rotated versions of the rasterop values */ rotS = rot; - xor = FbRot24(xor,rotS); - and = FbRot24(and,rotS); - if (startmask) - { - xorS = xor; - andS = and; - xor = FbNext24Pix(xor); - and = FbNext24Pix(and); + xor = FbRot24(xor, rotS); + and = FbRot24(and, rotS); + if (startmask) { + xorS = xor; + andS = and; + xor = FbNext24Pix(xor); + and = FbNext24Pix(and); } - - if (nmiddle) - { - xor0 = xor; - and0 = and; - xor1 = FbNext24Pix(xor0); - and1 = FbNext24Pix(and0); - xor2 = FbNext24Pix(xor1); - and2 = FbNext24Pix(and1); + + if (nmiddle) { + xor0 = xor; + and0 = and; + xor1 = FbNext24Pix(xor0); + and1 = FbNext24Pix(and0); + xor2 = FbNext24Pix(xor1); + and2 = FbNext24Pix(and1); } - - if (endmask) - { - switch (nmiddle % 3) { - case 0: - xorE = xor; - andE = and; - break; - case 1: - xorE = xor1; - andE = and1; - break; - case 2: - xorE = xor2; - andE = and2; - break; - } + + if (endmask) { + switch (nmiddle % 3) { + case 0: + xorE = xor; + andE = and; + break; + case 1: + xorE = xor1; + andE = and1; + break; + case 2: + xorE = xor2; + andE = and2; + break; + } } - - while (height--) - { - if (startmask) - { - WRITE(dst, FbDoMaskRRop(READ(dst), andS, xorS, startmask)); + + while (height--) { + if (startmask) { + WRITE(dst, FbDoMaskRRop(READ(dst), andS, xorS, startmask)); dst++; - } - n = nmiddle; - if (!and0) - { - while (n >= 3) - { - WRITE(dst++, xor0); - WRITE(dst++, xor1); - WRITE(dst++, xor2); - n -= 3; - } - if (n) - { - WRITE(dst++, xor0); - n--; - if (n) - { - WRITE(dst++, xor1); - } - } - } - else - { - while (n >= 3) - { - WRITE(dst, FbDoRRop (READ(dst), and0, xor0)); + } + n = nmiddle; + if (!and0) { + while (n >= 3) { + WRITE(dst++, xor0); + WRITE(dst++, xor1); + WRITE(dst++, xor2); + n -= 3; + } + if (n) { + WRITE(dst++, xor0); + n--; + if (n) { + WRITE(dst++, xor1); + } + } + } + else { + while (n >= 3) { + WRITE(dst, FbDoRRop(READ(dst), and0, xor0)); dst++; - WRITE(dst, FbDoRRop (READ(dst), and1, xor1)); + WRITE(dst, FbDoRRop(READ(dst), and1, xor1)); dst++; - WRITE(dst, FbDoRRop (READ(dst), and2, xor2)); + WRITE(dst, FbDoRRop(READ(dst), and2, xor2)); dst++; - n -= 3; - } - if (n) - { - WRITE(dst, FbDoRRop (READ(dst), and0, xor0)); + n -= 3; + } + if (n) { + WRITE(dst, FbDoRRop(READ(dst), and0, xor0)); dst++; - n--; - if (n) - { - WRITE(dst, FbDoRRop (READ(dst), and1, xor1)); + n--; + if (n) { + WRITE(dst, FbDoRRop(READ(dst), and1, xor1)); dst++; - } - } - } - if (endmask) - WRITE(dst, FbDoMaskRRop (READ(dst), andE, xorE, endmask)); - dst += dstStride; + } + } + } + if (endmask) + WRITE(dst, FbDoMaskRRop(READ(dst), andE, xorE, endmask)); + dst += dstStride; } } |