1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-24 17:49:52 +01:00

fix d2 palette bug

This commit is contained in:
FunkyFr3sh 2018-10-30 12:59:12 +01:00
parent 49c4fe826d
commit 5ea076752b

View File

@ -21,17 +21,17 @@
HRESULT __stdcall ddraw_palette_GetEntries(IDirectDrawPaletteImpl *This, DWORD dwFlags, DWORD dwBase, DWORD dwNumEntries, LPPALETTEENTRY lpEntries) HRESULT __stdcall ddraw_palette_GetEntries(IDirectDrawPaletteImpl *This, DWORD dwFlags, DWORD dwBase, DWORD dwNumEntries, LPPALETTEENTRY lpEntries)
{ {
int i; int i, x;
printf("DirectDrawPalette::GetEntries(This=%p, dwFlags=%08X, dwBase=%d, dwNumEntries=%d, lpEntries=%p)\n", This, (int)dwFlags, (int)dwBase, (int)dwNumEntries, lpEntries); printf("DirectDrawPalette::GetEntries(This=%p, dwFlags=%08X, dwBase=%d, dwNumEntries=%d, lpEntries=%p)\n", This, (int)dwFlags, (int)dwBase, (int)dwNumEntries, lpEntries);
for(i=dwBase;i<dwBase+dwNumEntries;i++) for (i = dwBase, x = 0; i < dwBase + dwNumEntries; i++, x++)
{ {
if (This->data_rgb) if (This->data_rgb)
{ {
lpEntries[i].peRed = This->data_rgb[i].rgbRed; lpEntries[x].peRed = This->data_rgb[i].rgbRed;
lpEntries[i].peGreen = This->data_rgb[i].rgbGreen; lpEntries[x].peGreen = This->data_rgb[i].rgbGreen;
lpEntries[i].peBlue = This->data_rgb[i].rgbBlue; lpEntries[x].peBlue = This->data_rgb[i].rgbBlue;
} }
} }
@ -40,26 +40,26 @@ HRESULT __stdcall ddraw_palette_GetEntries(IDirectDrawPaletteImpl *This, DWORD d
HRESULT __stdcall ddraw_palette_SetEntries(IDirectDrawPaletteImpl *This, DWORD dwFlags, DWORD dwStartingEntry, DWORD dwCount, LPPALETTEENTRY lpEntries) HRESULT __stdcall ddraw_palette_SetEntries(IDirectDrawPaletteImpl *This, DWORD dwFlags, DWORD dwStartingEntry, DWORD dwCount, LPPALETTEENTRY lpEntries)
{ {
int i; int i, x;
#if _DEBUG_X #if _DEBUG_X
printf("DirectDrawPalette::SetEntries(This=%p, dwFlags=%08X, dwStartingEntry=%d, dwCount=%d, lpEntries=%p)\n", This, (int)dwFlags, (int)dwStartingEntry, (int)dwCount, lpEntries); printf("DirectDrawPalette::SetEntries(This=%p, dwFlags=%08X, dwStartingEntry=%d, dwCount=%d, lpEntries=%p)\n", This, (int)dwFlags, (int)dwStartingEntry, (int)dwCount, lpEntries);
#endif #endif
for(i=dwStartingEntry;i<dwStartingEntry+dwCount;i++) for (i = dwStartingEntry, x = 0; i < dwStartingEntry + dwCount; i++, x++)
{ {
This->data_bgr[i] = (lpEntries[i].peBlue<<16)|(lpEntries[i].peGreen<<8)|lpEntries[i].peRed; This->data_bgr[i] = (lpEntries[x].peBlue << 16) | (lpEntries[x].peGreen << 8) | lpEntries[x].peRed;
if (This->data_rgb) if (This->data_rgb)
{ {
This->data_rgb[i].rgbRed = lpEntries[i].peRed; This->data_rgb[i].rgbRed = lpEntries[x].peRed;
This->data_rgb[i].rgbGreen = lpEntries[i].peGreen; This->data_rgb[i].rgbGreen = lpEntries[x].peGreen;
This->data_rgb[i].rgbBlue = lpEntries[i].peBlue; This->data_rgb[i].rgbBlue = lpEntries[x].peBlue;
This->data_rgb[i].rgbReserved = 0; This->data_rgb[i].rgbReserved = 0;
} }
} }
if(ddraw->primary && ddraw->primary->palette == This && ddraw->render.run) if (ddraw->primary && ddraw->primary->palette == This && ddraw->render.run)
{ {
InterlockedExchange(&ddraw->render.paletteUpdated, TRUE); InterlockedExchange(&ddraw->render.paletteUpdated, TRUE);
ReleaseSemaphore(ddraw->render.sem, 1, NULL); ReleaseSemaphore(ddraw->render.sem, 1, NULL);