Skip to content

Commit 23012a8

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 23012a8

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

source/dxgi/dxgi_swapchain.cpp

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

263263
#if RESHADE_ADDON
264+
_force_windowed_addon = false;
265+
_force_fullscreen_addon = false;
266+
264267
HMONITOR hmonitor = nullptr;
265268
if (pTarget != nullptr)
266269
{
@@ -270,7 +273,11 @@ HRESULT STDMETHODCALLTYPE DXGISwapChain::SetFullscreenState(BOOL Fullscreen, IDX
270273
}
271274

272275
if (reshade::invoke_addon_event<reshade::addon_event::set_fullscreen_state>(_impl, Fullscreen != FALSE, hmonitor))
276+
{
277+
_force_windowed_addon = Fullscreen == FALSE;
278+
_force_fullscreen_addon = Fullscreen != FALSE;
273279
return S_OK;
280+
}
274281
#endif
275282

276283
if (_force_windowed)
@@ -286,6 +293,31 @@ HRESULT STDMETHODCALLTYPE DXGISwapChain::SetFullscreenState(BOOL Fullscreen, IDX
286293
}
287294
HRESULT STDMETHODCALLTYPE DXGISwapChain::GetFullscreenState(BOOL *pFullscreen, IDXGIOutput **ppTarget)
288295
{
296+
if (_force_windowed
297+
#if RESHADE_ADDON
298+
|| _force_windowed_addon
299+
#endif
300+
)
301+
{
302+
if (pFullscreen != nullptr)
303+
*pFullscreen = FALSE;
304+
if (ppTarget != nullptr)
305+
*ppTarget = nullptr;
306+
return S_OK;
307+
}
308+
if (_force_fullscreen
309+
#if RESHADE_ADDON
310+
|| _force_fullscreen_addon
311+
#endif
312+
)
313+
{
314+
if (pFullscreen != nullptr)
315+
*pFullscreen = TRUE;
316+
if (ppTarget != nullptr)
317+
_orig->GetContainingOutput(ppTarget);
318+
return S_OK;
319+
}
320+
289321
const bool was_in_dxgi_runtime = g_in_dxgi_runtime;
290322
g_in_dxgi_runtime = true;
291323
const HRESULT hr = _orig->GetFullscreenState(pFullscreen, ppTarget);

source/dxgi/dxgi_swapchain.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,8 @@ 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+
#if RESHADE_ADDON
109+
bool _force_windowed_addon = false;
110+
bool _force_fullscreen_addon = false;
111+
#endif
108112
};

0 commit comments

Comments
 (0)