@@ -261,6 +261,9 @@ HRESULT STDMETHODCALLTYPE DXGISwapChain::SetFullscreenState(BOOL Fullscreen, IDX
261
261
LOG (INFO) << " Redirecting " << " IDXGISwapChain::SetFullscreenState" << ' (' << " this = " << this << " , Fullscreen = " << (Fullscreen ? " TRUE" : " FALSE" ) << " , pTarget = " << pTarget << ' )' << " ..." ;
262
262
263
263
#if RESHADE_ADDON
264
+ _force_windowed_addon = false ;
265
+ _force_fullscreen_addon = false ;
266
+
264
267
HMONITOR hmonitor = nullptr ;
265
268
if (pTarget != nullptr )
266
269
{
@@ -270,7 +273,11 @@ HRESULT STDMETHODCALLTYPE DXGISwapChain::SetFullscreenState(BOOL Fullscreen, IDX
270
273
}
271
274
272
275
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 ;
273
279
return S_OK;
280
+ }
274
281
#endif
275
282
276
283
if (_force_windowed)
@@ -286,6 +293,31 @@ HRESULT STDMETHODCALLTYPE DXGISwapChain::SetFullscreenState(BOOL Fullscreen, IDX
286
293
}
287
294
HRESULT STDMETHODCALLTYPE DXGISwapChain::GetFullscreenState (BOOL *pFullscreen, IDXGIOutput **ppTarget)
288
295
{
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
+
289
321
const bool was_in_dxgi_runtime = g_in_dxgi_runtime;
290
322
g_in_dxgi_runtime = true ;
291
323
const HRESULT hr = _orig->GetFullscreenState (pFullscreen, ppTarget);
0 commit comments