| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- using Ryujinx.Common.Configuration;
- using Ryujinx.Common.Logging;
- using Ryujinx.Input.HLE;
- using Ryujinx.SDL2.Common;
- using System;
- using System.Runtime.InteropServices;
- using static SDL2.SDL;
- namespace Ryujinx.Headless.SDL2.Vulkan
- {
- class VulkanWindow : WindowBase
- {
- private GraphicsDebugLevel _glLogLevel;
- public VulkanWindow(
- InputManager inputManager,
- GraphicsDebugLevel glLogLevel,
- AspectRatio aspectRatio,
- bool enableMouse,
- HideCursor hideCursor)
- : base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursor)
- {
- _glLogLevel = glLogLevel;
- }
- public override SDL_WindowFlags GetWindowFlags() => SDL_WindowFlags.SDL_WINDOW_VULKAN;
- protected override void InitializeWindowRenderer() { }
- protected override void InitializeRenderer()
- {
- Renderer?.Window.SetSize(DefaultWidth, DefaultHeight);
- MouseDriver.SetClientSize(DefaultWidth, DefaultHeight);
- }
- private void BasicInvoke(Action action)
- {
- action();
- }
- public unsafe IntPtr CreateWindowSurface(IntPtr instance)
- {
- ulong surfaceHandle = 0;
- Action createSurface = () =>
- {
- if (SDL_Vulkan_CreateSurface(WindowHandle, instance, out surfaceHandle) == SDL_bool.SDL_FALSE)
- {
- string errorMessage = $"SDL_Vulkan_CreateSurface failed with error \"{SDL_GetError()}\"";
- Logger.Error?.Print(LogClass.Application, errorMessage);
- throw new Exception(errorMessage);
- }
- };
- if (SDL2Driver.MainThreadDispatcher != null)
- {
- SDL2Driver.MainThreadDispatcher(createSurface);
- }
- else
- {
- createSurface();
- }
- return (IntPtr)surfaceHandle;
- }
- public unsafe string[] GetRequiredInstanceExtensions()
- {
- if (SDL_Vulkan_GetInstanceExtensions(WindowHandle, out uint extensionsCount, IntPtr.Zero) == SDL_bool.SDL_TRUE)
- {
- IntPtr[] rawExtensions = new IntPtr[(int)extensionsCount];
- string[] extensions = new string[(int)extensionsCount];
- fixed (IntPtr* rawExtensionsPtr = rawExtensions)
- {
- if (SDL_Vulkan_GetInstanceExtensions(WindowHandle, out extensionsCount, (IntPtr)rawExtensionsPtr) == SDL_bool.SDL_TRUE)
- {
- for (int i = 0; i < extensions.Length; i++)
- {
- extensions[i] = Marshal.PtrToStringUTF8(rawExtensions[i]);
- }
- return extensions;
- }
- }
- }
- string errorMessage = $"SDL_Vulkan_GetInstanceExtensions failed with error \"{SDL_GetError()}\"";
- Logger.Error?.Print(LogClass.Application, errorMessage);
- throw new Exception(errorMessage);
- }
- protected override void FinalizeWindowRenderer()
- {
- Device.DisposeGpu();
- }
- protected override void SwapBuffers() { }
- }
- }
|