From 8282891b5262cb16447fdde0c568f5b4a9e7ee7a Mon Sep 17 00:00:00 2001 From: nick Date: Sat, 21 Feb 2026 21:15:25 -0500 Subject: [PATCH 1/3] fix-alt-enter --- docs/CHANGELOG.md | 1 + game_patch/graphics/d3d11/gr_d3d11.cpp | 6 ++++++ game_patch/graphics/d3d11/gr_d3d11_hooks.cpp | 19 +++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index b2003197..3f9f2846 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -50,6 +50,7 @@ Version 1.3.0 (Bakeapple): Not yet released [@nickalreadyinuse](https://github.com/nickalreadyinuse) - Optimize network performance for `af_obj_update` packets and bot decommission logic +- Fix Alt+Enter crash in D3D11 Version 1.2.2 (Willow): Released Jan-04-2026 -------------------------------- diff --git a/game_patch/graphics/d3d11/gr_d3d11.cpp b/game_patch/graphics/d3d11/gr_d3d11.cpp index b61df78c..790e08ed 100644 --- a/game_patch/graphics/d3d11/gr_d3d11.cpp +++ b/game_patch/graphics/d3d11/gr_d3d11.cpp @@ -220,6 +220,12 @@ namespace df::gr::d3d11 dxgi_factory->CreateSwapChain(device_, &sd, &swap_chain_) ); } + + // Disable DXGI's built-in Alt+Enter fullscreen toggle. DXGI's auto-handling + // calls SetFullscreenState internally without the app's knowledge, which causes + // the next Present() call to return DXGI_ERROR_INVALID_CALL and crash. We handle + // Alt+Enter ourselves via WM_SYSKEYDOWN in the message handler. + dxgi_factory->MakeWindowAssociation(hwnd, DXGI_MWA_NO_ALT_ENTER); } void Renderer::init_back_buffer() diff --git a/game_patch/graphics/d3d11/gr_d3d11_hooks.cpp b/game_patch/graphics/d3d11/gr_d3d11_hooks.cpp index d29873f7..67992fb2 100644 --- a/game_patch/graphics/d3d11/gr_d3d11_hooks.cpp +++ b/game_patch/graphics/d3d11/gr_d3d11_hooks.cpp @@ -20,8 +20,13 @@ namespace df::gr::d3d11 { static std::optional renderer; + void update_window_mode(); + void msg_handler(UINT msg, WPARAM w_param, LPARAM l_param) { + if (!renderer) { + return; + } switch (msg) { case WM_ACTIVATEAPP: if (w_param) { @@ -32,6 +37,20 @@ namespace df::gr::d3d11 xlog::trace("inactive {:x} {:x}", w_param, l_param); renderer->window_inactive(); } + break; + case WM_SYSKEYDOWN: + // Handle Alt+Enter to toggle between fullscreen and windowed mode. + // DXGI's built-in Alt+Enter handling is disabled (MakeWindowAssociation with + // DXGI_MWA_NO_ALT_ENTER) to prevent it from calling SetFullscreenState internally, + // which would put the swap chain in an inconsistent state and crash on the next Present(). + if (w_param == VK_RETURN) { + auto new_mode = (rf::gr::screen.window_mode == rf::gr::FULLSCREEN) + ? rf::gr::WINDOWED + : rf::gr::FULLSCREEN; + rf::gr::screen.window_mode = new_mode; + update_window_mode(); + } + break; } } From f9aec66845d579e92cb399b6d12ba56955375383 Mon Sep 17 00:00:00 2001 From: Chris Parsons Date: Tue, 24 Feb 2026 00:35:52 -0330 Subject: [PATCH 2/3] Enhance comments for DXGI swap chain handling Added comments regarding DXGI's flip presentation model and fullscreen toggle handling. --- game_patch/graphics/d3d11/gr_d3d11.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/game_patch/graphics/d3d11/gr_d3d11.cpp b/game_patch/graphics/d3d11/gr_d3d11.cpp index 790e08ed..b7128f79 100644 --- a/game_patch/graphics/d3d11/gr_d3d11.cpp +++ b/game_patch/graphics/d3d11/gr_d3d11.cpp @@ -221,6 +221,8 @@ namespace df::gr::d3d11 ); } + // Alpine uses DXGI's flip presentation model, which requires ResizeBuffers + // after mode transitions // Disable DXGI's built-in Alt+Enter fullscreen toggle. DXGI's auto-handling // calls SetFullscreenState internally without the app's knowledge, which causes // the next Present() call to return DXGI_ERROR_INVALID_CALL and crash. We handle From b2ed4a9c956c4d82ae9cde878bd6fa3bf06bda08 Mon Sep 17 00:00:00 2001 From: Chris Parsons Date: Tue, 24 Feb 2026 00:36:20 -0330 Subject: [PATCH 3/3] Fix Alt+Enter crash in Direct3D 11 renderer --- docs/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 3f9f2846..1161106c 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -50,7 +50,7 @@ Version 1.3.0 (Bakeapple): Not yet released [@nickalreadyinuse](https://github.com/nickalreadyinuse) - Optimize network performance for `af_obj_update` packets and bot decommission logic -- Fix Alt+Enter crash in D3D11 +- Fix Alt+Enter crash in Direct3D 11 renderer Version 1.2.2 (Willow): Released Jan-04-2026 --------------------------------