aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Ava/AppHost.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Ava/AppHost.cs')
-rw-r--r--src/Ryujinx.Ava/AppHost.cs18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/Ryujinx.Ava/AppHost.cs b/src/Ryujinx.Ava/AppHost.cs
index 0c816538..d3e0ea39 100644
--- a/src/Ryujinx.Ava/AppHost.cs
+++ b/src/Ryujinx.Ava/AppHost.cs
@@ -40,6 +40,7 @@ using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
+using SPB.Graphics.Exceptions;
using SPB.Graphics.Vulkan;
using System;
using System.Collections.Generic;
@@ -475,11 +476,20 @@ namespace Ryujinx.Ava
_windowsMultimediaTimerResolution = null;
}
- (_rendererHost.EmbeddedWindow as EmbeddedWindowOpenGL)?.MakeCurrent();
+ if (_rendererHost.EmbeddedWindow is EmbeddedWindowOpenGL openGlWindow)
+ {
+ // Try to bind the OpenGL context before calling the shutdown event.
+ openGlWindow.MakeCurrent(false, false);
- Device.DisposeGpu();
+ Device.DisposeGpu();
- (_rendererHost.EmbeddedWindow as EmbeddedWindowOpenGL)?.MakeCurrent(null);
+ // Unbind context and destroy everything.
+ openGlWindow.MakeCurrent(true, false);
+ }
+ else
+ {
+ Device.DisposeGpu();
+ }
}
private void HideCursorState_Changed(object sender, ReactiveEventArgs<HideCursorMode> state)
@@ -930,7 +940,7 @@ namespace Ryujinx.Ava
_gpuDoneEvent.Set();
});
- (_rendererHost.EmbeddedWindow as EmbeddedWindowOpenGL)?.MakeCurrent(null);
+ (_rendererHost.EmbeddedWindow as EmbeddedWindowOpenGL)?.MakeCurrent(true);
}
public void UpdateStatus()