Skip to content

Commit 806924f

Browse files
committed
assign default palette to primary surface
1 parent ac19dec commit 806924f

File tree

3 files changed

+277
-3
lines changed

3 files changed

+277
-3
lines changed

inc/ddpalette.h

Lines changed: 261 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,265 @@ HRESULT ddp_GetEntries(IDirectDrawPaletteImpl* This, DWORD dwFlags, DWORD dwBase
1111
HRESULT ddp_SetEntries(IDirectDrawPaletteImpl* This, DWORD dwFlags, DWORD dwStartingEntry, DWORD dwCount, LPPALETTEENTRY lpEntries);
1212
HRESULT dd_CreatePalette(DWORD dwFlags, LPPALETTEENTRY lpDDColorArray, IDirectDrawPaletteImpl** lpDDPalette, IUnknown FAR* unkOuter);
1313

14+
// Original palette copied from Windows ME
15+
static PALETTEENTRY g_ddp_me_palette[] =
16+
{
17+
{ 0, 0, 0, 0 },
18+
{ 128, 0, 0, 0 },
19+
{ 0, 128, 0, 0 },
20+
{ 128, 128, 0, 0 },
21+
{ 0, 0, 128, 0 },
22+
{ 128, 0, 128, 0 },
23+
{ 0, 128, 128, 0 },
24+
{ 192, 192, 192, 0 },
25+
{ 192, 220, 192, 0 },
26+
{ 166, 202, 240, 0 },
27+
{ 95, 63, 63, 0 },
28+
{ 127, 63, 63, 0 },
29+
{ 159, 63, 63, 0 },
30+
{ 191, 63, 63, 0 },
31+
{ 223, 63, 63, 0 },
32+
{ 255, 63, 63, 0 },
33+
{ 63, 95, 63, 0 },
34+
{ 95, 95, 63, 0 },
35+
{ 127, 95, 63, 0 },
36+
{ 159, 95, 63, 0 },
37+
{ 191, 95, 63, 0 },
38+
{ 223, 95, 63, 0 },
39+
{ 255, 95, 63, 0 },
40+
{ 63, 127, 63, 0 },
41+
{ 95, 127, 63, 0 },
42+
{ 127, 127, 63, 0 },
43+
{ 159, 127, 63, 0 },
44+
{ 191, 127, 63, 0 },
45+
{ 223, 127, 63, 0 },
46+
{ 255, 127, 63, 0 },
47+
{ 63, 159, 63, 0 },
48+
{ 95, 159, 63, 0 },
49+
{ 127, 159, 63, 0 },
50+
{ 159, 159, 63, 0 },
51+
{ 191, 159, 63, 0 },
52+
{ 223, 159, 63, 0 },
53+
{ 255, 159, 63, 0 },
54+
{ 63, 191, 63, 0 },
55+
{ 95, 191, 63, 0 },
56+
{ 127, 191, 63, 0 },
57+
{ 159, 191, 63, 0 },
58+
{ 191, 191, 63, 0 },
59+
{ 223, 191, 63, 0 },
60+
{ 255, 191, 63, 0 },
61+
{ 63, 223, 63, 0 },
62+
{ 95, 223, 63, 0 },
63+
{ 127, 223, 63, 0 },
64+
{ 159, 223, 63, 0 },
65+
{ 191, 223, 63, 0 },
66+
{ 223, 223, 63, 0 },
67+
{ 255, 223, 63, 0 },
68+
{ 63, 255, 63, 0 },
69+
{ 95, 255, 63, 0 },
70+
{ 127, 255, 63, 0 },
71+
{ 159, 255, 63, 0 },
72+
{ 191, 255, 63, 0 },
73+
{ 223, 255, 63, 0 },
74+
{ 255, 255, 63, 0 },
75+
{ 63, 63, 95, 0 },
76+
{ 95, 63, 95, 0 },
77+
{ 127, 63, 95, 0 },
78+
{ 159, 63, 95, 0 },
79+
{ 191, 63, 95, 0 },
80+
{ 223, 63, 95, 0 },
81+
{ 255, 63, 95, 0 },
82+
{ 63, 95, 95, 0 },
83+
{ 95, 95, 95, 0 },
84+
{ 127, 95, 95, 0 },
85+
{ 159, 95, 95, 0 },
86+
{ 191, 95, 95, 0 },
87+
{ 223, 95, 95, 0 },
88+
{ 255, 95, 95, 0 },
89+
{ 63, 127, 95, 0 },
90+
{ 95, 127, 95, 0 },
91+
{ 127, 127, 95, 0 },
92+
{ 159, 127, 95, 0 },
93+
{ 191, 127, 95, 0 },
94+
{ 223, 127, 95, 0 },
95+
{ 255, 127, 95, 0 },
96+
{ 63, 159, 95, 0 },
97+
{ 95, 159, 95, 0 },
98+
{ 127, 159, 95, 0 },
99+
{ 159, 159, 95, 0 },
100+
{ 191, 159, 95, 0 },
101+
{ 223, 159, 95, 0 },
102+
{ 255, 159, 95, 0 },
103+
{ 63, 191, 95, 0 },
104+
{ 95, 191, 95, 0 },
105+
{ 127, 191, 95, 0 },
106+
{ 159, 191, 95, 0 },
107+
{ 191, 191, 95, 0 },
108+
{ 223, 191, 95, 0 },
109+
{ 255, 191, 95, 0 },
110+
{ 63, 223, 95, 0 },
111+
{ 95, 223, 95, 0 },
112+
{ 127, 223, 95, 0 },
113+
{ 159, 223, 95, 0 },
114+
{ 191, 223, 95, 0 },
115+
{ 223, 223, 95, 0 },
116+
{ 255, 223, 95, 0 },
117+
{ 63, 255, 95, 0 },
118+
{ 95, 255, 95, 0 },
119+
{ 127, 255, 95, 0 },
120+
{ 159, 255, 95, 0 },
121+
{ 191, 255, 95, 0 },
122+
{ 223, 255, 95, 0 },
123+
{ 255, 255, 95, 0 },
124+
{ 63, 63, 127, 0 },
125+
{ 95, 63, 127, 0 },
126+
{ 127, 63, 127, 0 },
127+
{ 159, 63, 127, 0 },
128+
{ 191, 63, 127, 0 },
129+
{ 223, 63, 127, 0 },
130+
{ 255, 63, 127, 0 },
131+
{ 63, 95, 127, 0 },
132+
{ 95, 95, 127, 0 },
133+
{ 127, 95, 127, 0 },
134+
{ 159, 95, 127, 0 },
135+
{ 191, 95, 127, 0 },
136+
{ 223, 95, 127, 0 },
137+
{ 255, 95, 127, 0 },
138+
{ 63, 127, 127, 0 },
139+
{ 95, 127, 127, 0 },
140+
{ 127, 127, 127, 0 },
141+
{ 159, 127, 127, 0 },
142+
{ 191, 127, 127, 0 },
143+
{ 223, 127, 127, 0 },
144+
{ 255, 127, 127, 0 },
145+
{ 63, 159, 127, 0 },
146+
{ 95, 159, 127, 0 },
147+
{ 127, 159, 127, 0 },
148+
{ 159, 159, 127, 0 },
149+
{ 191, 159, 127, 0 },
150+
{ 223, 159, 127, 0 },
151+
{ 255, 159, 127, 0 },
152+
{ 63, 191, 127, 0 },
153+
{ 95, 191, 127, 0 },
154+
{ 127, 191, 127, 0 },
155+
{ 159, 191, 127, 0 },
156+
{ 191, 191, 127, 0 },
157+
{ 223, 191, 127, 0 },
158+
{ 255, 191, 127, 0 },
159+
{ 63, 223, 127, 0 },
160+
{ 95, 223, 127, 0 },
161+
{ 127, 223, 127, 0 },
162+
{ 159, 223, 127, 0 },
163+
{ 191, 223, 127, 0 },
164+
{ 223, 223, 127, 0 },
165+
{ 255, 223, 127, 0 },
166+
{ 63, 255, 127, 0 },
167+
{ 95, 255, 127, 0 },
168+
{ 127, 255, 127, 0 },
169+
{ 159, 255, 127, 0 },
170+
{ 191, 255, 127, 0 },
171+
{ 223, 255, 127, 0 },
172+
{ 255, 255, 127, 0 },
173+
{ 63, 63, 159, 0 },
174+
{ 95, 63, 159, 0 },
175+
{ 127, 63, 159, 0 },
176+
{ 159, 63, 159, 0 },
177+
{ 191, 63, 159, 0 },
178+
{ 223, 63, 159, 0 },
179+
{ 255, 63, 159, 0 },
180+
{ 63, 95, 159, 0 },
181+
{ 95, 95, 159, 0 },
182+
{ 127, 95, 159, 0 },
183+
{ 159, 95, 159, 0 },
184+
{ 191, 95, 159, 0 },
185+
{ 223, 95, 159, 0 },
186+
{ 255, 95, 159, 0 },
187+
{ 63, 127, 159, 0 },
188+
{ 95, 127, 159, 0 },
189+
{ 127, 127, 159, 0 },
190+
{ 159, 127, 159, 0 },
191+
{ 191, 127, 159, 0 },
192+
{ 223, 127, 159, 0 },
193+
{ 255, 127, 159, 0 },
194+
{ 63, 159, 159, 0 },
195+
{ 95, 159, 159, 0 },
196+
{ 127, 159, 159, 0 },
197+
{ 159, 159, 159, 0 },
198+
{ 191, 159, 159, 0 },
199+
{ 223, 159, 159, 0 },
200+
{ 255, 159, 159, 0 },
201+
{ 63, 191, 159, 0 },
202+
{ 95, 191, 159, 0 },
203+
{ 127, 191, 159, 0 },
204+
{ 159, 191, 159, 0 },
205+
{ 191, 191, 159, 0 },
206+
{ 223, 191, 159, 0 },
207+
{ 255, 191, 159, 0 },
208+
{ 63, 223, 159, 0 },
209+
{ 95, 223, 159, 0 },
210+
{ 127, 223, 159, 0 },
211+
{ 159, 223, 159, 0 },
212+
{ 191, 223, 159, 0 },
213+
{ 223, 223, 159, 0 },
214+
{ 255, 223, 159, 0 },
215+
{ 63, 255, 159, 0 },
216+
{ 95, 255, 159, 0 },
217+
{ 127, 255, 159, 0 },
218+
{ 159, 255, 159, 0 },
219+
{ 191, 255, 159, 0 },
220+
{ 223, 255, 159, 0 },
221+
{ 255, 255, 159, 0 },
222+
{ 63, 63, 191, 0 },
223+
{ 95, 63, 191, 0 },
224+
{ 127, 63, 191, 0 },
225+
{ 159, 63, 191, 0 },
226+
{ 191, 63, 191, 0 },
227+
{ 223, 63, 191, 0 },
228+
{ 255, 63, 191, 0 },
229+
{ 63, 95, 191, 0 },
230+
{ 95, 95, 191, 0 },
231+
{ 127, 95, 191, 0 },
232+
{ 159, 95, 191, 0 },
233+
{ 191, 95, 191, 0 },
234+
{ 223, 95, 191, 0 },
235+
{ 255, 95, 191, 0 },
236+
{ 63, 127, 191, 0 },
237+
{ 95, 127, 191, 0 },
238+
{ 127, 127, 191, 0 },
239+
{ 159, 127, 191, 0 },
240+
{ 191, 127, 191, 0 },
241+
{ 223, 127, 191, 0 },
242+
{ 255, 127, 191, 0 },
243+
{ 63, 159, 191, 0 },
244+
{ 95, 159, 191, 0 },
245+
{ 127, 159, 191, 0 },
246+
{ 159, 159, 191, 0 },
247+
{ 191, 159, 191, 0 },
248+
{ 223, 159, 191, 0 },
249+
{ 255, 159, 191, 0 },
250+
{ 63, 191, 191, 0 },
251+
{ 95, 191, 191, 0 },
252+
{ 127, 191, 191, 0 },
253+
{ 159, 191, 191, 0 },
254+
{ 191, 191, 191, 0 },
255+
{ 223, 191, 191, 0 },
256+
{ 255, 191, 191, 0 },
257+
{ 63, 223, 191, 0 },
258+
{ 95, 223, 191, 0 },
259+
{ 127, 223, 191, 0 },
260+
{ 159, 223, 191, 0 },
261+
{ 191, 223, 191, 0 },
262+
{ 223, 223, 191, 0 },
263+
{ 255, 251, 240, 0 },
264+
{ 58, 109, 165, 0 },
265+
{ 128, 128, 128, 0 },
266+
{ 255, 0, 0, 0 },
267+
{ 0, 255, 0, 0 },
268+
{ 255, 255, 0, 0 },
269+
{ 0, 0, 255, 0 },
270+
{ 255, 0, 255, 0 },
271+
{ 0, 255, 255, 0 },
272+
{ 255, 255, 255, 0 }
273+
};
274+
14275
#endif

src/ddpalette.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ HRESULT dd_CreatePalette(
8484

8585
p->lpVtbl = &g_ddp_vtbl;
8686
p->flags = dwFlags;
87-
ddp_SetEntries(p, dwFlags, 0, 256, lpDDColorArray);
87+
ddp_SetEntries(p, dwFlags, 0, 256, lpDDColorArray);
8888
IDirectDrawPalette_AddRef(p);
8989

9090
*lpDDPalette = p;

src/ddsurface.c

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "ddclipper.h"
1515
#include "utils.h"
1616
#include "versionhelpers.h"
17+
#include "ddpalette.h"
1718

1819

1920
LONG g_dds_gdi_handles;
@@ -1093,8 +1094,7 @@ HRESULT dds_SetPalette(IDirectDrawSurfaceImpl* This, IDirectDrawPaletteImpl* lpD
10931094
if (lpDDPalette)
10941095
IDirectDrawPalette_AddRef(lpDDPalette);
10951096

1096-
if (This->palette)
1097-
IDirectDrawPalette_Release(This->palette);
1097+
IDirectDrawPaletteImpl* old_palette = This->palette;
10981098

10991099
if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw.ref)
11001100
{
@@ -1113,6 +1113,9 @@ HRESULT dds_SetPalette(IDirectDrawSurfaceImpl* This, IDirectDrawPaletteImpl* lpD
11131113
This->palette = lpDDPalette;
11141114
}
11151115

1116+
if (old_palette)
1117+
IDirectDrawPalette_Release(old_palette);
1118+
11161119
return DD_OK;
11171120
}
11181121

@@ -1574,6 +1577,16 @@ HRESULT dd_CreateSurface(
15741577
{
15751578
g_ddraw.primary = dst_surface;
15761579
FakePrimarySurface = dst_surface->surface;
1580+
1581+
if (dst_surface->bpp == 8)
1582+
{
1583+
IDirectDrawPaletteImpl* lpDDPalette;
1584+
dd_CreatePalette(DDPCAPS_ALLOW256, g_ddp_me_palette, &lpDDPalette, NULL);
1585+
dds_SetPalette(dst_surface, lpDDPalette);
1586+
1587+
// Make sure temp palette will be released once replaced
1588+
IDirectDrawPalette_Release(lpDDPalette);
1589+
}
15771590
}
15781591
}
15791592

0 commit comments

Comments
 (0)