@@ -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}
287294HRESULT 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);
0 commit comments