From f49f09895b5e4e55bb8f8b1cd107086315e923f9 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Thu, 15 Aug 2024 12:06:02 +0200 Subject: [PATCH] save and restore dc state --- inc/IDirectDrawSurface.h | 1 + src/dd.c | 2 +- src/ddsurface.c | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/inc/IDirectDrawSurface.h b/inc/IDirectDrawSurface.h index e339450..f04e03a 100644 --- a/inc/IDirectDrawSurface.h +++ b/inc/IDirectDrawSurface.h @@ -38,6 +38,7 @@ typedef struct IDirectDrawSurfaceImpl PBITMAPINFO bmi; HBITMAP bitmap; HDC hdc; + int dc_state; DDCOLORKEY color_key; DWORD last_flip_tick; DWORD last_blt_tick; diff --git a/src/dd.c b/src/dd.c index 0da10a2..24625b1 100644 --- a/src/dd.c +++ b/src/dd.c @@ -1283,7 +1283,7 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) { hook_init(); - g_ddraw.wndproc = (WNDPROC)real_SetWindowLongA(g_ddraw.hwnd, GWL_WNDPROC, (LONG)fake_WndProc); + //g_ddraw.wndproc = (WNDPROC)real_SetWindowLongA(g_ddraw.hwnd, GWL_WNDPROC, (LONG)fake_WndProc); g_ddraw.gui_thread_id = GetWindowThreadProcessId(g_ddraw.hwnd, NULL); if (!g_ddraw.render.hdc) diff --git a/src/ddsurface.c b/src/ddsurface.c index 9dfe0c7..29df8a4 100644 --- a/src/ddsurface.c +++ b/src/ddsurface.c @@ -914,6 +914,8 @@ HRESULT dds_GetDC(IDirectDrawSurfaceImpl* This, HDC FAR* lpHDC) if (lpHDC) *lpHDC = dc; + InterlockedExchange(&This->dc_state, SaveDC(dc)); + return DD_OK; } @@ -1024,6 +1026,8 @@ HRESULT dds_ReleaseDC(IDirectDrawSurfaceImpl* This, HDC hDC) } } + RestoreDC(hDC, InterlockedExchangeAdd((LONG*)&This->dc_state, 0)); + return DD_OK; }