private static VkSurfaceKHR CreateUIViewSurface(VkGraphicsDevice gd, VkInstance instance, UIViewSwapchainSource uiViewSource, bool hasExtMetalSurface) { CAMetalLayer metalLayer = CAMetalLayer.New(); UIView uiView = new UIView(uiViewSource.UIView); metalLayer.frame = uiView.frame; metalLayer.opaque = true; uiView.layer.addSublayer(metalLayer.NativePtr); if (hasExtMetalSurface) { VkMetalSurfaceCreateInfoEXT surfaceCI = new VkMetalSurfaceCreateInfoEXT(); surfaceCI.sType = VkMetalSurfaceCreateInfoEXT.VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT; surfaceCI.pLayer = metalLayer.NativePtr.ToPointer(); VkSurfaceKHR surface; VkResult result = gd.CreateMetalSurfaceEXT(instance, &surfaceCI, null, &surface); CheckResult(result); return(surface); } else { VkIOSSurfaceCreateInfoMVK surfaceCI = VkIOSSurfaceCreateInfoMVK.New(); surfaceCI.pView = uiView.NativePtr.ToPointer(); VkResult result = vkCreateIOSSurfaceMVK(instance, ref surfaceCI, null, out VkSurfaceKHR surface); return(surface); } }
private static VkSurfaceKHR CreateUIViewSurface(VkInstance instance, UIViewSwapchainSource uiViewSource) { CAMetalLayer metalLayer = CAMetalLayer.New(); UIView uiView = new UIView(uiViewSource.UIView); metalLayer.frame = uiView.frame; metalLayer.opaque = true; uiView.layer.addSublayer(metalLayer.NativePtr); VkIOSSurfaceCreateInfoMVK surfaceCI = VkIOSSurfaceCreateInfoMVK.New(); surfaceCI.pView = uiView.NativePtr.ToPointer(); VkResult result = vkCreateIOSSurfaceMVK(instance, ref surfaceCI, null, out VkSurfaceKHR surface); return(surface); }