From a0c80f3e830bd9f752ae8c4dd92b530ad074fc8e Mon Sep 17 00:00:00 2001
From: Toni Spets <toni.spets@iki.fi>
Date: Sat, 2 Apr 2011 21:05:14 +0300
Subject: [PATCH] Change palette data_rgb to external RGBQUAD array for
 software rendering, it was not used before

---
 palette.c | 10 +++++++++-
 palette.h |  2 +-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/palette.c b/palette.c
index 027f9f1..22b0941 100644
--- a/palette.c
+++ b/palette.c
@@ -35,7 +35,13 @@ HRESULT __stdcall ddraw_palette_SetEntries(IDirectDrawPaletteImpl *This, DWORD d
     for(i=0;i<256;i++)
     {
         This->data_bgr[i] = (lpEntries[i].peBlue<<16)|(lpEntries[i].peGreen<<8)|lpEntries[i].peRed;
-        This->data_rgb[i] = (lpEntries[i].peRed<<16)|(lpEntries[i].peGreen<<8)|(lpEntries[i].peBlue);
+        if (This->data_rgb)
+        {
+            This->data_rgb[i].rgbRed = lpEntries[i].peRed;
+            This->data_rgb[i].rgbGreen = lpEntries[i].peGreen;
+            This->data_rgb[i].rgbBlue = lpEntries[i].peBlue;
+            This->data_rgb[i].rgbReserved = 0;
+        }
     }
 
     return DD_OK;
@@ -105,6 +111,8 @@ HRESULT __stdcall ddraw_CreatePalette(IDirectDrawImpl *This, DWORD dwFlags, LPPA
     printf(" Palette = %p\n", Palette);
     *lpDDPalette = (LPDIRECTDRAWPALETTE)Palette;
 
+    Palette->data_rgb = NULL;
+
     ddraw_palette_SetEntries(Palette, dwFlags, 0, 256, lpDDColorArray);
 
     ddraw_palette_AddRef(Palette);
diff --git a/palette.h b/palette.h
index 9e6f0f2..ee4d978 100644
--- a/palette.h
+++ b/palette.h
@@ -31,7 +31,7 @@ typedef struct IDirectDrawPaletteImpl
     ULONG Ref;
 
     int data_bgr[256];
-    int data_rgb[256];
+    RGBQUAD *data_rgb;
 
 } IDirectDrawPaletteImpl;