mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-30 01:29:42 -06:00
Merge pull request #1894 from Armada651/exclusive-fix
D3D: Fix Dolphin immediately exiting exclusive fullscreen.
This commit is contained in:
@ -862,7 +862,7 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, co
|
||||
SetWindowSize(fbStride, fbHeight);
|
||||
|
||||
const bool windowResized = CheckForResize();
|
||||
const bool fullscreen = g_ActiveConfig.bFullscreen &&
|
||||
const bool fullscreen = g_ActiveConfig.bFullscreen && !g_ActiveConfig.bBorderlessFullscreen &&
|
||||
!SConfig::GetInstance().m_LocalCoreStartupParameter.bRenderToMain;
|
||||
|
||||
bool xfbchanged = s_last_xfb_mode != g_ActiveConfig.bUseRealXFB;
|
||||
@ -885,26 +885,21 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, co
|
||||
{
|
||||
if (fullscreen && !exclusive_mode)
|
||||
{
|
||||
if (g_Config.bExclusiveMode)
|
||||
OSD::AddMessage("Lost exclusive fullscreen.");
|
||||
|
||||
// Exclusive fullscreen is enabled in the configuration, but we're
|
||||
// not in exclusive mode. Either exclusive fullscreen was turned on
|
||||
// or the render frame lost focus. When the render frame is in focus
|
||||
// we can apply exclusive mode.
|
||||
fullscreen_changed = Host_RendererHasFocus();
|
||||
|
||||
g_Config.bExclusiveMode = false;
|
||||
}
|
||||
else if (!fullscreen)
|
||||
else if (!fullscreen && exclusive_mode)
|
||||
{
|
||||
if (exclusive_mode)
|
||||
{
|
||||
// Exclusive fullscreen is disabled, but we're still in exclusive mode.
|
||||
fullscreen_changed = true;
|
||||
}
|
||||
else if (!g_ActiveConfig.bBorderlessFullscreen && Host_RendererIsFullscreen())
|
||||
{
|
||||
// Exclusive fullscreen is disabled and we are no longer in exclusive
|
||||
// mode. Thus we can now safely notify the UI to exit fullscreen. But
|
||||
// we should only do so if borderless fullscreen mode is disabled.
|
||||
Host_RequestFullscreen(false);
|
||||
}
|
||||
// Exclusive fullscreen is disabled, but we're still in exclusive mode.
|
||||
fullscreen_changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -924,8 +919,19 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, co
|
||||
{
|
||||
// Apply fullscreen state
|
||||
if (fullscreen_changed)
|
||||
{
|
||||
g_Config.bExclusiveMode = fullscreen;
|
||||
|
||||
if (fullscreen)
|
||||
OSD::AddMessage("Entered exclusive fullscreen.");
|
||||
|
||||
D3D::SetFullscreenState(fullscreen);
|
||||
|
||||
// If fullscreen is disabled we can safely notify the UI to exit fullscreen.
|
||||
if (!g_ActiveConfig.bFullscreen)
|
||||
Host_RequestFullscreen(false);
|
||||
}
|
||||
|
||||
// TODO: Aren't we still holding a reference to the back buffer right now?
|
||||
D3D::Reset();
|
||||
SAFE_RELEASE(s_screenshot_texture);
|
||||
|
Reference in New Issue
Block a user