From 2e23e4309c0508a056a77f7cfa6d80a444e4a021 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sat, 6 Nov 2021 17:12:02 +0100 Subject: [PATCH] run lobby in fullscreen with opengl/gdi renderer --- inc/dd.h | 1 + src/config.c | 24 ++---------------------- src/winapi_hooks.c | 25 ++++++++++++++----------- src/wndproc.c | 8 ++------ 4 files changed, 19 insertions(+), 39 deletions(-) diff --git a/inc/dd.h b/inc/dd.h index 4afc477..5fc29c0 100644 --- a/inc/dd.h +++ b/inc/dd.h @@ -155,6 +155,7 @@ typedef struct CNCDDRAW BOOL bnet_was_fullscreen; BOOL bnet_was_upscaled; RECT bnet_win_rect; + DEVMODE bnet_mode; POINT bnet_pos; void* last_freed_palette; /* Dungeon Keeper hack */ BOOL child_window_exists; diff --git a/src/config.c b/src/config.c index c2cf65b..3d8946d 100644 --- a/src/config.c +++ b/src/config.c @@ -40,7 +40,7 @@ void cfg_load() g_ddraw->vhack = cfg_get_bool("vhack", FALSE); g_ddraw->accurate_timers = cfg_get_bool("accuratetimers", FALSE); g_ddraw->resizable = cfg_get_bool("resizable", TRUE); - g_ddraw->nonexclusive = cfg_get_bool("nonexclusive", FALSE); + g_ddraw->nonexclusive = TRUE;// cfg_get_bool("nonexclusive", FALSE); g_ddraw->fixpitch = cfg_get_bool("fixpitch", FALSE); g_ddraw->fixchilds = cfg_get_int("fixchilds", FIX_CHILDS_DETECT_PAINT); g_ddraw->fixwndprochook = cfg_get_bool("fixwndprochook", FALSE); @@ -149,11 +149,7 @@ void cfg_load() { g_ddraw->renderer = gdi_render_main; } - else if (tolower(tmp[0]) == 'd') /* direct3d9 */ - { - g_ddraw->renderer = d3d9_render_main; - } - else if (tolower(tmp[0]) == 'o') /* opengl */ + else /* opengl */ { if (oglu_load_dll()) { @@ -165,22 +161,6 @@ void cfg_load() g_ddraw->renderer = gdi_render_main; } } - else /* auto */ - { - if (!g_ddraw->wine && d3d9_is_available()) - { - g_ddraw->renderer = d3d9_render_main; - } - else if (oglu_load_dll()) - { - g_ddraw->renderer = ogl_render_main; - } - else - { - g_ddraw->show_driver_warning = TRUE; - g_ddraw->renderer = gdi_render_main; - } - } } void cfg_save() diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c index 55fd09a..b26365b 100644 --- a/src/winapi_hooks.c +++ b/src/winapi_hooks.c @@ -617,13 +617,13 @@ BOOL WINAPI fake_DestroyWindow(HWND hWnd) dst_height, flags); } - - g_ddraw->fullscreen = g_ddraw->bnet_was_upscaled; - - SetTimer(g_ddraw->hwnd, IDT_TIMER_LEAVE_BNET, 1000, (TIMERPROC)NULL); - - g_ddraw->resizable = TRUE; } + + g_ddraw->fullscreen = g_ddraw->bnet_was_upscaled; + + SetTimer(g_ddraw->hwnd, IDT_TIMER_LEAVE_BNET, 1000, (TIMERPROC)NULL); + + g_ddraw->resizable = TRUE; } } @@ -649,9 +649,12 @@ HWND WINAPI fake_CreateWindowExA( if (!g_ddraw->windowed && !g_ddraw->bnet_was_fullscreen) { - int ws = g_config.window_state; - util_toggle_fullscreen(); - g_config.window_state = ws; + memcpy(&g_ddraw->bnet_mode, &g_ddraw->render.mode, sizeof(DEVMODE)); + + g_ddraw->render.mode.dmPelsWidth = 640; + g_ddraw->render.mode.dmPelsHeight = 480; + ChangeDisplaySettings(&g_ddraw->render.mode, CDS_FULLSCREEN); + g_ddraw->bnet_was_fullscreen = TRUE; } @@ -684,8 +687,8 @@ HWND WINAPI fake_CreateWindowExA( int align_y = added_height > 0 ? added_height / 2 : 0; int align_x = added_width > 0 ? added_width / 2 : 0; - X += pt.x + align_x; - Y += pt.y + align_y; + X += pt.x;// +align_x; + Y += pt.y;// +align_y; dwStyle |= WS_CLIPCHILDREN; } diff --git a/src/wndproc.c b/src/wndproc.c index 230d050..e001662 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -145,16 +145,12 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { KillTimer(g_ddraw->hwnd, IDT_TIMER_LEAVE_BNET); - if (!g_ddraw->windowed) - g_ddraw->bnet_was_fullscreen = FALSE; - if (!g_ddraw->bnet_active) { if (g_ddraw->bnet_was_fullscreen) { - int ws = g_config.window_state; - util_toggle_fullscreen(); - g_config.window_state = ws; + memcpy(&g_ddraw->render.mode, &g_ddraw->bnet_mode, sizeof(DEVMODE)); + dd_SetDisplayMode(g_ddraw->width, g_ddraw->height, g_ddraw->bpp, 0); g_ddraw->bnet_was_fullscreen = FALSE; } else if (g_ddraw->bnet_was_upscaled)