From c4a6f8dbf45f9f38a32c78961c81185a04b4f481 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 11 Jun 2017 19:21:41 +0200 Subject: [PATCH] DirectDraw now attempts fall back to system buffers if initialization has failed, patch from mainline PCem; The WM_SIZE handler no longer resizes the window if the window is not set to resizable. --- src/WIN/win.c | 26 +++++++++++++++----------- src/WIN/win_ddraw.cc | 18 ++++++++++++++++-- src/WIN/win_ddraw_fs.cc | 9 ++++++++- 3 files changed, 39 insertions(+), 14 deletions(-) diff --git a/src/WIN/win.c b/src/WIN/win.c index 8e3c2da57..5064828fd 100644 --- a/src/WIN/win.c +++ b/src/WIN/win.c @@ -2163,18 +2163,22 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM break; } - winsizex = (lParam & 0xFFFF); - winsizey = (lParam >> 16) - (17 + 6); - - pause = 1; - MoveWindow(hwndRender, 0, 0, winsizex, winsizey, TRUE); - - if (vid_apis[video_fullscreen][vid_api].resize) + if (vid_resize) { - startblit(); - video_wait_for_blit(); - endblit(); - vid_apis[video_fullscreen][vid_api].resize(winsizex, winsizey); + winsizex = (lParam & 0xFFFF); + winsizey = (lParam >> 16) - (17 + 6); + + pause = 1; + MoveWindow(hwndRender, 0, 0, winsizex, winsizey, TRUE); + + if (vid_apis[video_fullscreen][vid_api].resize) + { + startblit(); + video_wait_for_blit(); + endblit(); + vid_apis[video_fullscreen][vid_api].resize(winsizex, winsizey); + } + } MoveWindow(hwndStatus, 0, winsizey + 6, winsizex, 17, TRUE); diff --git a/src/WIN/win_ddraw.cc b/src/WIN/win_ddraw.cc index 39eeaca9a..e87265f87 100644 --- a/src/WIN/win_ddraw.cc +++ b/src/WIN/win_ddraw.cc @@ -65,7 +65,14 @@ int ddraw_init(HWND h) ddsd.dwHeight = 2048; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY; if (FAILED(lpdd7->CreateSurface(&ddsd, &lpdds_back, NULL))) - return 0; + { + ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; + ddsd.dwWidth = 2048; + ddsd.dwHeight = 2048; + ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; + if (FAILED(lpdd7->CreateSurface(&ddsd, &lpdds_back, NULL))) + fatal("CreateSurface back failed\n"); + } memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); @@ -75,7 +82,14 @@ int ddraw_init(HWND h) ddsd.dwHeight = 2048; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY; if (FAILED(lpdd7->CreateSurface(&ddsd, &lpdds_back2, NULL))) - return 0; + { + ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; + ddsd.dwWidth = 2048; + ddsd.dwHeight = 2048; + ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; + if (FAILED(lpdd7->CreateSurface(&ddsd, &lpdds_back2, NULL))) + fatal("CreateSurface back failed\n"); + } if (FAILED(lpdd7->CreateClipper(0, &lpdd_clipper, NULL))) return 0; diff --git a/src/WIN/win_ddraw_fs.cc b/src/WIN/win_ddraw_fs.cc index f29524d64..abb390093 100644 --- a/src/WIN/win_ddraw_fs.cc +++ b/src/WIN/win_ddraw_fs.cc @@ -78,7 +78,14 @@ int ddraw_fs_init(HWND h) ddsd.dwHeight = 2048; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY; if (FAILED(lpdd7->CreateSurface(&ddsd, &lpdds_back, NULL))) - return 0; + { + ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; + ddsd.dwWidth = 2048; + ddsd.dwHeight = 2048; + ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; + if (FAILED(lpdd7->CreateSurface(&ddsd, &lpdds_back, NULL))) + return 0; + } pclog("DDRAW_INIT complete\n"); ddraw_hwnd = h;