From b97af7a4f96d4d18944f12f9f41c3a98974f8b15 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Tue, 15 Jun 2021 03:20:41 +0200 Subject: [PATCH] add some additional checks --- src/ddsurface.c | 6 +++--- src/render_d3d9.c | 4 +++- src/render_gdi.c | 4 +++- src/render_ogl.c | 4 +++- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/ddsurface.c b/src/ddsurface.c index 9d56ad2..1fa267d 100644 --- a/src/ddsurface.c +++ b/src/ddsurface.c @@ -999,7 +999,7 @@ HRESULT dds_GetDC(IDirectDrawSurfaceImpl* This, HDC FAR* lpHDC) if (This->backbuffer || (This->caps & DDSCAPS_BACKBUFFER)) dc = (HDC)InterlockedExchangeAdd((LONG*)&This->hdc, 0); - if (data) + if (This->bpp == 8 && data) SetDIBColorTable(dc, 0, 256, data); if (lpHDC) @@ -1170,7 +1170,7 @@ HRESULT dds_Unlock(IDirectDrawSurfaceImpl* This, LPRECT lpRect) if (hwnd && (This->caps & DDSCAPS_PRIMARYSURFACE)) { HDC primary_dc; - dds_GetDC(g_ddraw->primary, &primary_dc); + dds_GetDC(This, &primary_dc); /* GdiTransparentBlt idea taken from Aqrit's war2 ddraw */ @@ -1225,7 +1225,7 @@ HRESULT dds_Unlock(IDirectDrawSurfaceImpl* This, LPRECT lpRect) if (hwnd && (This->caps & DDSCAPS_PRIMARYSURFACE)) { HDC primary_dc; - dds_GetDC(g_ddraw->primary, &primary_dc); + dds_GetDC(This, &primary_dc); RECT rc; if (fake_GetWindowRect(hwnd, &rc)) diff --git a/src/render_d3d9.c b/src/render_d3d9.c index 3998bd3..7a423be 100644 --- a/src/render_d3d9.c +++ b/src/render_d3d9.c @@ -328,7 +328,9 @@ DWORD WINAPI d3d9_render_main(void) EnterCriticalSection(&g_ddraw->cs); - if (g_ddraw->primary && (g_ddraw->bpp == 16 || g_ddraw->bpp == 32 || g_ddraw->primary->palette)) + if (g_ddraw->primary && + g_ddraw->primary->bpp == g_ddraw->bpp && + (g_ddraw->bpp == 16 || g_ddraw->bpp == 32 || g_ddraw->primary->palette)) { if (g_ddraw->vhack) { diff --git a/src/render_gdi.c b/src/render_gdi.c index 7c78c64..8fa174c 100644 --- a/src/render_gdi.c +++ b/src/render_gdi.c @@ -47,7 +47,9 @@ DWORD WINAPI gdi_render_main(void) EnterCriticalSection(&g_ddraw->cs); - if (g_ddraw->primary && (g_ddraw->bpp == 16 || g_ddraw->bpp == 32 || g_ddraw->primary->palette)) + if (g_ddraw->primary && + g_ddraw->primary->bpp == g_ddraw->bpp && + (g_ddraw->bpp == 16 || g_ddraw->bpp == 32 || g_ddraw->primary->palette)) { if (warning_end_tick) { diff --git a/src/render_ogl.c b/src/render_ogl.c index fde11aa..2b1acd7 100644 --- a/src/render_ogl.c +++ b/src/render_ogl.c @@ -582,7 +582,9 @@ static void ogl_render() EnterCriticalSection(&g_ddraw->cs); - if (g_ddraw->primary && (g_ddraw->bpp == 16 || g_ddraw->bpp == 32 || g_ddraw->primary->palette)) + if (g_ddraw->primary && + g_ddraw->primary->bpp == g_ddraw->bpp && + (g_ddraw->bpp == 16 || g_ddraw->bpp == 32 || g_ddraw->primary->palette)) { if (g_ddraw->vhack) {