Exemple #1
0
        internal GraphicsManager(Game game, IntPtr sdlRendererHandle)
        {
            _log  = LogManager.GetForCurrentAssembly();
            _game = game;

            SdlRendererHandle = sdlRendererHandle;

            CreateVulkanInstance();

            SDL2.SDL_Vulkan_CreateSurface(
                _game.Window.SdlWindowHandle,
                VulkanInstanceHandle,
                out var surfacePtr
                );

            SdlVulkanSurfaceHandle = new UIntPtr(surfacePtr);
            SdlVulkanSurface       = (SurfaceKhr)typeof(SurfaceKhr).GetConstructor(
                BindingFlags.NonPublic | BindingFlags.Instance,
                null, Type.EmptyTypes, null
                ).Invoke(null);
            typeof(SurfaceKhr).GetField("m", BindingFlags.Instance | BindingFlags.NonPublic)
            .SetValue(SdlVulkanSurface, surfacePtr
                      );

            var physDevs = VulkanInstance.EnumeratePhysicalDevices();

            InitializeVulkan(physDevs[0], SdlVulkanSurface);

            RenderContext = new RenderContext(game);
        }
 public VulkanSupportedDevices(VulkanInstance myWindow, SurfaceKHR mySurface, IPreferredGraphicsDeviceFilter CustomGraphicFilter = null, IPreferredComputeDeviceFilter CustomComputeFilter = null)
 {
     if (CustomGraphicFilter != null)
     {
         GraphicsDevicePreferences = CustomGraphicFilter;
     }
     if (CustomComputeFilter != null)
     {
         ComputeDevicePreferences = CustomComputeFilter;
     }
     foreach (var A in myWindow.EnumeratePhysicalDevices())
     {
         VulkanPhysicalDevice myPhysicalDevice = (VulkanPhysicalDevice)A;
         myDevices.Add(new Support(A, GraphicsDevicePreferences.Score(A, mySurface), ComputeDevicePreferences.Score(A)));
     }
 }