1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00

override first and last color in palette if DDPCAPS_ALLOW256 isn't set

This commit is contained in:
FunkyFr3sh 2021-05-13 20:02:35 +02:00
parent 772394fabc
commit 1afa15bdba
2 changed files with 21 additions and 8 deletions

View File

@ -17,6 +17,7 @@ typedef struct IDirectDrawPaletteImpl
int data_bgr[256];
RGBQUAD* data_rgb;
DWORD flags;
} IDirectDrawPaletteImpl;

View File

@ -30,14 +30,6 @@ HRESULT ddp_SetEntries(IDirectDrawPaletteImpl *This, DWORD dwFlags, DWORD dwStar
for (i = dwStartingEntry, x = 0; i < dwStartingEntry + dwCount; i++, x++)
{
/* Knights and Merchants video palette bug test code
if (i == 0 && lpEntries[0].peBlue == 255 && lpEntries[0].peRed == 255 && lpEntries[0].peGreen == 255 && g_ddraw->width == 640 && g_ddraw->height == 480)
{
lpEntries[0].peBlue = 0;
lpEntries[0].peRed = 0;
lpEntries[0].peGreen = 0;
}
*/
This->data_bgr[i] = (lpEntries[x].peBlue << 16) | (lpEntries[x].peGreen << 8) | lpEntries[x].peRed;
if (This->data_rgb)
@ -49,6 +41,25 @@ HRESULT ddp_SetEntries(IDirectDrawPaletteImpl *This, DWORD dwFlags, DWORD dwStar
}
}
if (!(This->flags & DDPCAPS_ALLOW256))
{
This->data_bgr[0] = 0;
This->data_bgr[255] = (255 << 16) | (255 << 8) | 255;
if (This->data_rgb)
{
This->data_rgb[0].rgbRed = 0;
This->data_rgb[0].rgbGreen = 0;
This->data_rgb[0].rgbBlue = 0;
This->data_rgb[0].rgbReserved = 0;
This->data_rgb[255].rgbRed = 255;
This->data_rgb[255].rgbGreen = 255;
This->data_rgb[255].rgbBlue = 255;
This->data_rgb[255].rgbReserved = 0;
}
}
if (g_ddraw->primary && g_ddraw->primary->palette == This && g_ddraw->render.run)
{
InterlockedExchange(&g_ddraw->render.palette_updated, TRUE);
@ -65,6 +76,7 @@ HRESULT dd_CreatePalette(DWORD dwFlags, LPPALETTEENTRY lpDDColorArray, LPDIRECTD
dprintf(" Palette = %p\n", p);
p->lpVtbl = &g_ddp_vtbl;
p->flags = dwFlags;
ddp_SetEntries(p, dwFlags, 0, 256, lpDDColorArray);
IDirectDrawPalette_AddRef(p);