wined3d: Implement CONVERT_RGB32_888 conversion.
authorAlexander Dorofeyev <alexd4@inbox.lv>
Sun, 6 Apr 2008 21:05:48 +0000 (00:05 +0300)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 7 Apr 2008 19:17:15 +0000 (21:17 +0200)
dlls/wined3d/surface.c

index ddd0f32adfe871801bc79f87076530807fa29e2a..8190a15c2054f462d90a7108c63f5e98ac043ea1 100644 (file)
@@ -1799,6 +1799,29 @@ HRESULT d3dfmt_convert_surface(BYTE *src, BYTE *dst, UINT pitch, UINT width, UIN
         }
         break;
 
+        case CONVERT_RGB32_888:
+        {
+            /* Converting X8R8G8B8 format to R8G8B8A8 with color-keying. */
+            unsigned int x, y;
+            for (y = 0; y < height; y++)
+            {
+                source = src + pitch * y;
+                dest = dst + outpitch * y;
+                for (x = 0; x < width; x++) {
+                    DWORD color = 0xffffff & *(DWORD*)source;
+                    DWORD dstcolor = color << 8;
+                    if ((color < This->SrcBltCKey.dwColorSpaceLowValue) ||
+                        (color > This->SrcBltCKey.dwColorSpaceHighValue)) {
+                        dstcolor |= 0xff;
+                    }
+                    *(DWORD*)dest = dstcolor;
+                    source += 4;
+                    dest += 4;
+                }
+            }
+        }
+        break;
+
         case CONVERT_V8U8:
         {
             unsigned int x, y;