EmbeddedWindowVulkan.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using Silk.NET.Vulkan;
  2. using SPB.Graphics.Vulkan;
  3. using SPB.Platform.Metal;
  4. using SPB.Platform.Win32;
  5. using SPB.Platform.X11;
  6. using SPB.Windowing;
  7. using System;
  8. namespace Ryujinx.Ava.UI.Renderer
  9. {
  10. public class EmbeddedWindowVulkan : EmbeddedWindow
  11. {
  12. public SurfaceKHR CreateSurface(Instance instance)
  13. {
  14. NativeWindowBase nativeWindowBase;
  15. if (OperatingSystem.IsWindows())
  16. {
  17. nativeWindowBase = new SimpleWin32Window(new NativeHandle(WindowHandle));
  18. }
  19. else if (OperatingSystem.IsLinux())
  20. {
  21. nativeWindowBase = new SimpleX11Window(new NativeHandle(X11Display), new NativeHandle(WindowHandle));
  22. }
  23. else if (OperatingSystem.IsMacOS())
  24. {
  25. nativeWindowBase = new SimpleMetalWindow(new NativeHandle(NsView), new NativeHandle(MetalLayer));
  26. }
  27. else
  28. {
  29. throw new PlatformNotSupportedException();
  30. }
  31. return new SurfaceKHR((ulong?)VulkanHelper.CreateWindowSurface(instance.Handle, nativeWindowBase));
  32. }
  33. public SurfaceKHR CreateSurface(Instance instance, Vk api)
  34. {
  35. return CreateSurface(instance);
  36. }
  37. }
  38. }