assign default palette to primary surface

This commit is contained in:
FunkyFr3sh 2024-12-15 00:05:51 +01:00
parent ac19dec2c4
commit 806924f86e
3 changed files with 277 additions and 3 deletions

View file

@ -84,7 +84,7 @@ HRESULT dd_CreatePalette(
p->lpVtbl = &g_ddp_vtbl;
p->flags = dwFlags;
ddp_SetEntries(p, dwFlags, 0, 256, lpDDColorArray);
ddp_SetEntries(p, dwFlags, 0, 256, lpDDColorArray);
IDirectDrawPalette_AddRef(p);
*lpDDPalette = p;

View file

@ -14,6 +14,7 @@
#include "ddclipper.h"
#include "utils.h"
#include "versionhelpers.h"
#include "ddpalette.h"
LONG g_dds_gdi_handles;
@ -1093,8 +1094,7 @@ HRESULT dds_SetPalette(IDirectDrawSurfaceImpl* This, IDirectDrawPaletteImpl* lpD
if (lpDDPalette)
IDirectDrawPalette_AddRef(lpDDPalette);
if (This->palette)
IDirectDrawPalette_Release(This->palette);
IDirectDrawPaletteImpl* old_palette = This->palette;
if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw.ref)
{
@ -1113,6 +1113,9 @@ HRESULT dds_SetPalette(IDirectDrawSurfaceImpl* This, IDirectDrawPaletteImpl* lpD
This->palette = lpDDPalette;
}
if (old_palette)
IDirectDrawPalette_Release(old_palette);
return DD_OK;
}
@ -1574,6 +1577,16 @@ HRESULT dd_CreateSurface(
{
g_ddraw.primary = dst_surface;
FakePrimarySurface = dst_surface->surface;
if (dst_surface->bpp == 8)
{
IDirectDrawPaletteImpl* lpDDPalette;
dd_CreatePalette(DDPCAPS_ALLOW256, g_ddp_me_palette, &lpDDPalette, NULL);
dds_SetPalette(dst_surface, lpDDPalette);
// Make sure temp palette will be released once replaced
IDirectDrawPalette_Release(lpDDPalette);
}
}
}