+ //dprintf2("w: %i h: %i pi: %i pf: %i\n", sd.dwWidth, sd.dwHeight, sd.lPitch, sd.ddpfPixelFormat.dwRGBBitCount);\r
+\r
+ if (sd.ddpfPixelFormat.dwRGBBitCount == 32)\r
+ {\r
+ int *dst = (int *)sd.lpSurface;\r
+ for (y = 0; y < EmuHeight; y++)\r
+ {\r
+ for (x = 0; x < EmuWidth; x++)\r
+ {\r
+ int s = *ps++;\r
+ dst[x] = ((s&0xf800)<<8) | ((s&0x07e0)<<5) | ((s&0x001f)<<3);\r
+ }\r
+ dst = (int *)((char *)dst + sd.lPitch);\r
+ }\r
+ }\r
+ else if (sd.ddpfPixelFormat.dwRGBBitCount == 24) /* wine uses this for me */\r
+ {\r
+ void *dst = sd.lpSurface;\r
+ for (y = 0; y < EmuHeight; y++)\r
+ {\r
+ unsigned char *dst1 = (unsigned char *) dst;\r
+ for (x = 0; x < EmuWidth; x++, dst1 += 3)\r
+ {\r
+ int s = *ps++;\r
+ dst1[2] = (s&0xf800)>>8; dst1[1] = (s&0x07e0)>>3; dst1[0] = s<<3; // BGR\r
+ }\r
+ dst = (void *)((char *)dst + sd.lPitch);\r
+ }\r
+ }\r
+ else if (sd.ddpfPixelFormat.dwRGBBitCount == 16)\r
+ {\r
+ unsigned short *dst = (unsigned short *)sd.lpSurface;\r
+ for (y = 0; y < EmuHeight; y++)\r
+ {\r
+ memcpy(dst, ps, EmuWidth*2);\r
+ ps += EmuWidth;\r
+ dst = (unsigned short *)((char *)dst + sd.lPitch);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ LOGFAIL();\r
+ }\r