mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-15 06:04:49 +01:00
#111 clear screen on resolution change and window resize
This commit is contained in:
parent
4cd10d6ac0
commit
b3f9e7d045
1
inc/dd.h
1
inc/dd.h
@ -83,6 +83,7 @@ typedef struct CNCDDRAW
|
||||
|
||||
LONG palette_updated;
|
||||
LONG surface_updated;
|
||||
LONG clear_screen;
|
||||
|
||||
float scale_w;
|
||||
float scale_h;
|
||||
|
5
src/dd.c
5
src/dd.c
@ -763,6 +763,11 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl
|
||||
|
||||
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.surface_updated, TRUE);
|
||||
ReleaseSemaphore(g_ddraw->render.sem, 1, NULL);
|
||||
|
@ -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;
|
||||
EnumChildWindows(g_ddraw->hwnd, util_enum_child_proc, (LPARAM)g_ddraw->primary);
|
||||
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
SetStretchBltMode(g_ddraw->render.hdc, HALFTONE);
|
||||
|
@ -659,7 +659,7 @@ static void ogl_render()
|
||||
if (glGetError() != GL_NO_ERROR)
|
||||
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);
|
||||
}
|
||||
|
@ -27,8 +27,6 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
|
||||
lParam);
|
||||
*/
|
||||
|
||||
RECT rc = { 0, 0, g_ddraw->render.width, g_ddraw->render.height };
|
||||
|
||||
static BOOL in_size_move = FALSE;
|
||||
static int redraw_count = 0;
|
||||
|
||||
@ -749,10 +747,10 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
|
||||
}
|
||||
case WM_ERASEBKGND:
|
||||
{
|
||||
EnterCriticalSection(&g_ddraw->cs);
|
||||
FillRect(g_ddraw->render.hdc, &rc, (HBRUSH)GetStockObject(BLACK_BRUSH));
|
||||
ReleaseSemaphore(g_ddraw->render.sem, 1, NULL);
|
||||
LeaveCriticalSection(&g_ddraw->cs);
|
||||
if (g_ddraw->maintas || g_ddraw->boxing)
|
||||
{
|
||||
InterlockedExchange(&g_ddraw->render.clear_screen, TRUE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user