Skip to content

Commit cce45d3

Browse files
committed
Change "IDXGISwapChain::GetFullscreenState" to return forced fullscreen state when set by an add-on or config
Needed in Fallout 4, since otherwise it continues trying to change the fullscreen state
1 parent 1b703f3 commit cce45d3

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

source/dxgi/dxgi_swapchain.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,8 @@ HRESULT STDMETHODCALLTYPE DXGISwapChain::SetFullscreenState(BOOL Fullscreen, IDX
260260
{
261261
LOG(INFO) << "Redirecting " << "IDXGISwapChain::SetFullscreenState" << '(' << "this = " << this << ", Fullscreen = " << (Fullscreen ? "TRUE" : "FALSE") << ", pTarget = " << pTarget << ')' << " ...";
262262

263+
_current_fullscreen_state = -1;
264+
263265
#if RESHADE_ADDON
264266
HMONITOR hmonitor = nullptr;
265267
if (pTarget != nullptr)
@@ -270,13 +272,22 @@ HRESULT STDMETHODCALLTYPE DXGISwapChain::SetFullscreenState(BOOL Fullscreen, IDX
270272
}
271273

272274
if (reshade::invoke_addon_event<reshade::addon_event::set_fullscreen_state>(_impl, Fullscreen != FALSE, hmonitor))
275+
{
276+
_current_fullscreen_state = Fullscreen;
273277
return S_OK;
278+
}
274279
#endif
275280

276281
if (_force_windowed)
282+
{
283+
_current_fullscreen_state = Fullscreen;
277284
Fullscreen = FALSE;
285+
}
278286
if (_force_fullscreen)
287+
{
288+
_current_fullscreen_state = Fullscreen;
279289
Fullscreen = TRUE;
290+
}
280291

281292
const bool was_in_dxgi_runtime = g_in_dxgi_runtime;
282293
g_in_dxgi_runtime = true;
@@ -286,6 +297,15 @@ HRESULT STDMETHODCALLTYPE DXGISwapChain::SetFullscreenState(BOOL Fullscreen, IDX
286297
}
287298
HRESULT STDMETHODCALLTYPE DXGISwapChain::GetFullscreenState(BOOL *pFullscreen, IDXGIOutput **ppTarget)
288299
{
300+
if (_current_fullscreen_state >= 0)
301+
{
302+
if (pFullscreen != nullptr)
303+
*pFullscreen = _current_fullscreen_state;
304+
if (ppTarget != nullptr)
305+
_orig->GetContainingOutput(ppTarget);
306+
return S_OK;
307+
}
308+
289309
const bool was_in_dxgi_runtime = g_in_dxgi_runtime;
290310
g_in_dxgi_runtime = true;
291311
const HRESULT hr = _orig->GetFullscreenState(pFullscreen, ppTarget);

source/dxgi/dxgi_swapchain.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,5 @@ struct DECLSPEC_UUID("1F445F9F-9887-4C4C-9055-4E3BADAFCCA8") DXGISwapChain final
105105
bool _force_vsync = false;
106106
bool _force_windowed = false;
107107
bool _force_fullscreen = false;
108+
BOOL _current_fullscreen_state = -1;
108109
};

0 commit comments

Comments
 (0)