public Instance(InstanceCreateInfo info) { if (info == null) { throw new ArgumentNullException(nameof(info)); } Init(info); }
public Instance(InstanceCreateInfo info, VkAllocationCallbacks callbacks) { if (info == null) { throw new ArgumentNullException(nameof(info)); } alloc = Marshal.AllocHGlobal(Marshal.SizeOf <VkAllocationCallbacks>()); Marshal.StructureToPtr(callbacks, alloc, false); Init(info); }
void CreateInstance(InstanceCreateInfo mInfo) { InteropString appName = null; InteropString engineName = null; Marshalled <VkApplicationInfo> appInfoMarshalled = null; var extensionsMarshalled = new NativeStringArray(mInfo.extensions); var layersMarshalled = new NativeStringArray(mInfo.layers); var info = new VkInstanceCreateInfo(); info.sType = VkStructureType.InstanceCreateInfo; info.enabledExtensionCount = (uint)extensionsMarshalled.Count; info.ppEnabledExtensionNames = extensionsMarshalled.Address; info.enabledLayerCount = (uint)layersMarshalled.Count; info.ppEnabledLayerNames = layersMarshalled.Address; if (mInfo.applicationInfo != null) { var appInfo = new VkApplicationInfo(); appInfo.sType = VkStructureType.ApplicationInfo; appInfo.apiVersion = mInfo.applicationInfo.apiVersion; appInfo.engineVersion = mInfo.applicationInfo.engineVersion; appInfo.applicationVersion = mInfo.applicationInfo.applicationVersion; appName = new InteropString(mInfo.applicationInfo.applicationName); appInfo.pApplicationName = appName.Address; engineName = new InteropString(mInfo.applicationInfo.engineName); appInfo.pEngineName = engineName.Address; appInfoMarshalled = new Marshalled <VkApplicationInfo>(appInfo); info.pApplicationInfo = appInfoMarshalled.Address; } using (appName) //appName, engineName, and appInfoMarshalled may be null using (engineName) using (appInfoMarshalled) using (extensionsMarshalled) using (layersMarshalled) { var result = createInstance(ref info, alloc, out instance); if (result != VkResult.Success) { throw new InstanceException(string.Format("Error creating instance: {0}", result)); } } }
void Init(InstanceCreateInfo mInfo) { if (!GLFW.GLFW.VulkanSupported()) { throw new InstanceException("Vulkan not supported"); } if (!initialized) { Init(); } if (mInfo.extensions == null) { extensions = new List <string>(); } else { extensions = new List <string>(mInfo.extensions); } if (mInfo.layers == null) { layers = new List <string>(); } else { layers = new List <string>(mInfo.layers); } CreateInstance(mInfo); Extensions = extensions.AsReadOnly(); Layers = layers.AsReadOnly(); Vulkan.Load(ref getProcAddrDel, instance); Commands = new InstanceCommands(this); GetPhysicalDevices(); }