aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTSRBerry <20988865+TSRBerry@users.noreply.github.com>2022-11-26 12:06:53 +0100
committerGitHub <noreply@github.com>2022-11-26 12:06:53 +0100
commit6f0f99ee2b844284d00da9ef8533acfd96de08fd (patch)
tree37f8c32145e0df494c25b0390314e9326522a48c
parent70f2da8fdf313c22ffcb72d492cc7c865d6cb77e (diff)
Avalonia: Fix OpenGL crashing on Linux (#3902)1.1.390
* ava: Fix OpenGL crashing on Linux Fixes a regression from #3901 * Fix formatting
-rw-r--r--Ryujinx.Ava/Ui/Controls/EmbeddedWindow.cs18
-rw-r--r--Ryujinx.Ava/Ui/Controls/VulkanEmbeddedWindow.cs15
2 files changed, 22 insertions, 11 deletions
diff --git a/Ryujinx.Ava/Ui/Controls/EmbeddedWindow.cs b/Ryujinx.Ava/Ui/Controls/EmbeddedWindow.cs
index f60ee7e0..7acbefca 100644
--- a/Ryujinx.Ava/Ui/Controls/EmbeddedWindow.cs
+++ b/Ryujinx.Ava/Ui/Controls/EmbeddedWindow.cs
@@ -15,12 +15,12 @@ using static Ryujinx.Ava.Ui.Controls.Win32NativeInterop;
namespace Ryujinx.Ava.Ui.Controls
{
- public unsafe class EmbeddedWindow : NativeControlHost
+ public class EmbeddedWindow : NativeControlHost
{
private WindowProc _wndProcDelegate;
private string _className;
- protected GLXWindow X11Window { get; private set; }
+ protected GLXWindow X11Window { get; set; }
protected IntPtr WindowHandle { get; set; }
protected IntPtr X11Display { get; set; }
@@ -94,21 +94,17 @@ namespace Ryujinx.Ava.Ui.Controls
}
[SupportedOSPlatform("linux")]
- IPlatformHandle CreateLinux(IPlatformHandle parent)
+ protected virtual IPlatformHandle CreateLinux(IPlatformHandle parent)
{
- X11Window = new GLXWindow(new NativeHandle(X11.DefaultDisplay), new NativeHandle(parent.Handle));
-
+ X11Window = PlatformHelper.CreateOpenGLWindow(FramebufferFormat.Default, 0, 0, 100, 100) as GLXWindow;
WindowHandle = X11Window.WindowHandle.RawHandle;
-
- X11Display = X11Window.DisplayHandle.RawHandle;
-
- X11Window.Hide();
+ X11Display = X11Window.DisplayHandle.RawHandle;
return new PlatformHandle(WindowHandle, "X11");
}
[SupportedOSPlatform("windows")]
- unsafe IPlatformHandle CreateWin32(IPlatformHandle parent)
+ IPlatformHandle CreateWin32(IPlatformHandle parent)
{
_className = "NativeWindow-" + Guid.NewGuid();
_wndProcDelegate = WndProc;
@@ -144,7 +140,7 @@ namespace Ryujinx.Ava.Ui.Controls
}
[SupportedOSPlatform("windows")]
- internal IntPtr WndProc(IntPtr hWnd, WindowsMessages msg, IntPtr wParam, IntPtr lParam)
+ IntPtr WndProc(IntPtr hWnd, WindowsMessages msg, IntPtr wParam, IntPtr lParam)
{
var point = new Point((long)lParam & 0xFFFF, ((long)lParam >> 16) & 0xFFFF);
var root = VisualRoot as Window;
diff --git a/Ryujinx.Ava/Ui/Controls/VulkanEmbeddedWindow.cs b/Ryujinx.Ava/Ui/Controls/VulkanEmbeddedWindow.cs
index 4954c882..236a0a16 100644
--- a/Ryujinx.Ava/Ui/Controls/VulkanEmbeddedWindow.cs
+++ b/Ryujinx.Ava/Ui/Controls/VulkanEmbeddedWindow.cs
@@ -1,10 +1,13 @@
+using Avalonia.Platform;
using Ryujinx.Ava.Ui.Controls;
using Silk.NET.Vulkan;
using SPB.Graphics.Vulkan;
+using SPB.Platform.GLX;
using SPB.Platform.Win32;
using SPB.Platform.X11;
using SPB.Windowing;
using System;
+using System.Runtime.Versioning;
namespace Ryujinx.Ava.Ui
{
@@ -12,6 +15,18 @@ namespace Ryujinx.Ava.Ui
{
private NativeWindowBase _window;
+ [SupportedOSPlatform("linux")]
+ protected override IPlatformHandle CreateLinux(IPlatformHandle parent)
+ {
+ X11Window = new GLXWindow(new NativeHandle(X11.DefaultDisplay), new NativeHandle(parent.Handle));
+ WindowHandle = X11Window.WindowHandle.RawHandle;
+ X11Display = X11Window.DisplayHandle.RawHandle;
+
+ X11Window.Hide();
+
+ return new PlatformHandle(WindowHandle, "X11");
+ }
+
public SurfaceKHR CreateSurface(Instance instance)
{
if (OperatingSystem.IsWindows())