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