Add support for 24bpp dib colorbox blit

Elias Ross genman at maison-otaku.net
Fri Mar 12 15:07:19 CST 2004


<http://bugs.winehq.org/attachment.cgi?id=557&action=view>
-------------- next part --------------
Index: dib.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/dsurface/dib.c,v
retrieving revision 1.32
diff -b -B -U8 -r1.32 dib.c
--- dib.c	4 Mar 2004 20:41:14 -0000	1.32
+++ dib.c	10 Mar 2004 08:32:28 -0000
@@ -904,19 +904,40 @@
 	            if (tmp < keylow || tmp > keyhigh) d[x] = tmp; \
 	        } \
 	        (LPBYTE)s += sdesc.u1.lPitch; \
 	        (LPBYTE)d += ddesc.u1.lPitch; \
             } \
             break; \
         }
 
+#define COPYBOX_COLORKEY3() { \
+            BYTE *d, *s; \
+            DWORD tmp; \
+            s = (BYTE *) sdesc.lpSurface; \
+            d = (BYTE *) ddesc.lpSurface; \
+            for (y = 0; y < h; y++) { \
+	        for (x = 0; x < w * 3; x += 3) { \
+	            tmp = (DWORD)s[x] + ((DWORD)s[x + 1] << 8) + ((DWORD)s[x + 2] << 16); \
+	            if (tmp < keylow || tmp > keyhigh) { \
+                        d[x + 0] = s[x + 0]; \
+                        d[x + 1] = s[x + 1]; \
+                        d[x + 2] = s[x + 2]; \
+                    } \
+	        } \
+	        (LPBYTE)s += sdesc.u1.lPitch; \
+	        (LPBYTE)d += ddesc.u1.lPitch; \
+            } \
+            break; \
+        }
+
         switch (bpp) {
 	    case 1: COPYBOX_COLORKEY(BYTE)
 	    case 2: COPYBOX_COLORKEY(WORD)
+	    case 3: COPYBOX_COLORKEY3()
 	    case 4: COPYBOX_COLORKEY(DWORD)
 	    default:
 		FIXME("Source color key blitting not supported for bpp %d\n",bpp*8);
 	        ret = DDERR_UNSUPPORTED;
 	        goto error;
 	}
 #undef COPYBOX_COLORKEY
     } else {


More information about the wine-patches mailing list