diff options
Diffstat (limited to 'Ryujinx.Ava/UI/Helpers/VulkanEmbeddedWindow.cs')
-rw-r--r-- | Ryujinx.Ava/UI/Helpers/VulkanEmbeddedWindow.cs | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/Ryujinx.Ava/UI/Helpers/VulkanEmbeddedWindow.cs b/Ryujinx.Ava/UI/Helpers/VulkanEmbeddedWindow.cs new file mode 100644 index 00000000..6581610b --- /dev/null +++ b/Ryujinx.Ava/UI/Helpers/VulkanEmbeddedWindow.cs @@ -0,0 +1,52 @@ +using Avalonia.Platform; +using Silk.NET.Vulkan; +using SPB.Graphics.Vulkan; +using SPB.Platform.GLX; +using SPB.Platform.Metal; +using SPB.Platform.Win32; +using SPB.Platform.X11; +using SPB.Windowing; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Ava.UI.Helpers +{ + public class VulkanEmbeddedWindow : EmbeddedWindow + { + 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()) + { + _window = new SimpleWin32Window(new NativeHandle(WindowHandle)); + } + else if (OperatingSystem.IsLinux()) + { + _window = new SimpleX11Window(new NativeHandle(X11Display), new NativeHandle(WindowHandle)); + } + else if (OperatingSystem.IsMacOS()) + { + _window = new SimpleMetalWindow(new NativeHandle(NsView), new NativeHandle(MetalLayer)); + } + else + { + throw new PlatformNotSupportedException(); + } + + return new SurfaceKHR((ulong?)VulkanHelper.CreateWindowSurface(instance.Handle, _window)); + } + } +}
\ No newline at end of file |