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

#111 clear screen on resolution change and window resize

This commit is contained in:
FunkyFr3sh 2021-08-05 00:26:29 +02:00
parent 4cd10d6ac0
commit b3f9e7d045
6 changed files with 22 additions and 7 deletions

View File

@ -83,6 +83,7 @@ typedef struct CNCDDRAW
LONG palette_updated; LONG palette_updated;
LONG surface_updated; LONG surface_updated;
LONG clear_screen;
float scale_w; float scale_w;
float scale_h; float scale_h;

View File

@ -763,6 +763,11 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl
if (g_ddraw->render.thread == NULL) if (g_ddraw->render.thread == NULL)
{ {
if (g_ddraw->maintas || g_ddraw->boxing)
{
InterlockedExchange(&g_ddraw->render.clear_screen, TRUE);
}
InterlockedExchange(&g_ddraw->render.palette_updated, TRUE); InterlockedExchange(&g_ddraw->render.palette_updated, TRUE);
InterlockedExchange(&g_ddraw->render.surface_updated, TRUE); InterlockedExchange(&g_ddraw->render.surface_updated, TRUE);
ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); ReleaseSemaphore(g_ddraw->render.sem, 1, NULL);

View File

@ -416,6 +416,11 @@ DWORD WINAPI d3d9_render_main(void)
} }
} }
if (InterlockedExchange(&g_ddraw->render.clear_screen, FALSE))
{
IDirect3DDevice9_Clear(g_d3d9.device, 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
}
g_ddraw->child_window_exists = FALSE; g_ddraw->child_window_exists = FALSE;
EnumChildWindows(g_ddraw->hwnd, util_enum_child_proc, (LPARAM)g_ddraw->primary); EnumChildWindows(g_ddraw->hwnd, util_enum_child_proc, (LPARAM)g_ddraw->primary);

View File

@ -80,6 +80,12 @@ DWORD WINAPI gdi_render_main(void)
memcpy(&g_ddraw->primary->bmi->bmiColors[0], g_ddraw->primary->palette->data_rgb, 256 * sizeof(int)); memcpy(&g_ddraw->primary->bmi->bmiColors[0], g_ddraw->primary->palette->data_rgb, 256 * sizeof(int));
} }
if (InterlockedExchange(&g_ddraw->render.clear_screen, FALSE))
{
RECT rc = { 0, 0, g_ddraw->render.width, g_ddraw->render.height };
FillRect(g_ddraw->render.hdc, &rc, (HBRUSH)GetStockObject(BLACK_BRUSH));
}
if (g_ddraw->gdilinear) if (g_ddraw->gdilinear)
{ {
SetStretchBltMode(g_ddraw->render.hdc, HALFTONE); SetStretchBltMode(g_ddraw->render.hdc, HALFTONE);

View File

@ -659,7 +659,7 @@ static void ogl_render()
if (glGetError() != GL_NO_ERROR) if (glGetError() != GL_NO_ERROR)
g_ogl.use_opengl = FALSE; g_ogl.use_opengl = FALSE;
} }
else if (g_ddraw->wine) else if (g_ddraw->wine || InterlockedExchange(&g_ddraw->render.clear_screen, FALSE))
{ {
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
} }

View File

@ -27,8 +27,6 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
lParam); lParam);
*/ */
RECT rc = { 0, 0, g_ddraw->render.width, g_ddraw->render.height };
static BOOL in_size_move = FALSE; static BOOL in_size_move = FALSE;
static int redraw_count = 0; static int redraw_count = 0;
@ -749,10 +747,10 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
} }
case WM_ERASEBKGND: case WM_ERASEBKGND:
{ {
EnterCriticalSection(&g_ddraw->cs); if (g_ddraw->maintas || g_ddraw->boxing)
FillRect(g_ddraw->render.hdc, &rc, (HBRUSH)GetStockObject(BLACK_BRUSH)); {
ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); InterlockedExchange(&g_ddraw->render.clear_screen, TRUE);
LeaveCriticalSection(&g_ddraw->cs); }
break; break;
} }
} }