protected override void PlatformDispose() { _scFB.Dispose(); vkDestroySurfaceKHR(_instance, _surface, null); if (_debugCallbackFunc != null) { _debugCallbackFunc = null; FixedUtf8String debugExtFnName = "vkDestroyDebugReportCallbackEXT"; IntPtr destroyFuncPtr = vkGetInstanceProcAddr(_instance, debugExtFnName); vkDestroyDebugReportCallbackEXT_d destroyDel = Marshal.GetDelegateForFunctionPointer <vkDestroyDebugReportCallbackEXT_d>(destroyFuncPtr); VkResult debugDestroyResult = destroyDel(_instance, _debugCallbackHandle, null); CheckResult(debugDestroyResult); } vkDestroyDescriptorPool(_device, _descriptorPool, null); vkDestroyCommandPool(_device, _graphicsCommandPool, null); vkDestroyFence(_device, _imageAvailableFence, null); _memoryManager.Dispose(); VkResult result = vkDeviceWaitIdle(_device); CheckResult(result); vkDestroyDevice(_device, null); vkDestroyInstance(_instance, null); }
private void EnableDebugCallback(VkDebugReportFlagBitsEXT flags = VkDebugReportFlagBitsEXT.VK_DEBUG_REPORT_ERROR_BIT_EXT | VkDebugReportFlagBitsEXT.VK_DEBUG_REPORT_WARNING_BIT_EXT | VkDebugReportFlagBitsEXT.VK_DEBUG_REPORT_DEBUG_BIT_EXT) { Debug.WriteLine("Enabling Vulkan Debug callbacks."); this.debugCallbackFunc = this.DebugCallback; IntPtr debugFunctionPtr = Marshal.GetFunctionPointerForDelegate(this.debugCallbackFunc); VkDebugReportCallbackCreateInfoEXT debugCallbackCI = new VkDebugReportCallbackCreateInfoEXT(); debugCallbackCI.sType = VkStructureType.VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT; debugCallbackCI.flags = flags; debugCallbackCI.pfnCallback = debugFunctionPtr; var createFnPtr = VulkanNative.vkGetInstanceProcAddr(this.vkInstance, "vkCreateDebugReportCallbackEXT".ToPointer()); if (createFnPtr == IntPtr.Zero) { return; } vkCreateDebugReportCallbackEXT_d createDelegate = Marshal.GetDelegateForFunctionPointer <vkCreateDebugReportCallbackEXT_d>(createFnPtr); VkResult result = createDelegate(this.vkInstance, &debugCallbackCI, IntPtr.Zero, out this.debugCallbackHandle); Helpers.CheckErrors(result); }
private unsafe VkResult CreateDebugReportCallback( VkDebugReportFlagsEXT flags ) { _debugCallbackFunction = DebugCallback; var debugFunctionPtr = Marshal.GetFunctionPointerForDelegate(_debugCallbackFunction); var debugCallbackInfo = new VkDebugReportCallbackCreateInfoEXT { sType = VkStructureType.DebugReportCallbackCreateInfoEXT, flags = flags, pfnCallback = debugFunctionPtr }; var createFunctionPtr = VulkanNative.vkGetInstanceProcAddr( _handle, new FixedUtf8String("vkCreateDebugReportCallbackEXT") ); if (createFunctionPtr == IntPtr.Zero) { return(VkResult.ErrorValidationFailedEXT); } var createDelegate = Marshal.GetDelegateForFunctionPointer <vkCreateDebugReportCallbackEXT_d>( createFunctionPtr ); return(createDelegate( _handle, &debugCallbackInfo, IntPtr.Zero, out _debugCallbackHandle )); }
public void EnableDebugCallback(VkDebugReportFlagsEXT flags = VkDebugReportFlagsEXT.WarningEXT | VkDebugReportFlagsEXT.ErrorEXT) { _debugCallbackFunc = DebugCallback; IntPtr debugFunctionPtr = Marshal.GetFunctionPointerForDelegate(_debugCallbackFunc); VkDebugReportCallbackCreateInfoEXT debugCallbackCI = VkDebugReportCallbackCreateInfoEXT.New(); debugCallbackCI.flags = flags; debugCallbackCI.pfnCallback = debugFunctionPtr; FixedUtf8String debugExtFnName = "vkCreateDebugReportCallbackEXT"; IntPtr createFnPtr = vkGetInstanceProcAddr(_instance, debugExtFnName); vkCreateDebugReportCallbackEXT_d createDelegate = Marshal.GetDelegateForFunctionPointer <vkCreateDebugReportCallbackEXT_d>(createFnPtr); createDelegate(_instance, &debugCallbackCI, IntPtr.Zero, out _debugCallbackHandle); }
protected override void PlatformDispose() { _scInfo.Dispose(); if (_debugCallbackFunc != null) { _debugCallbackFunc = null; FixedUtf8String debugExtFnName = "vkDestroyDebugReportCallbackEXT"; IntPtr destroyFuncPtr = vkGetInstanceProcAddr(_instance, debugExtFnName); vkDestroyDebugReportCallbackEXT_d destroyDel = Marshal.GetDelegateForFunctionPointer <vkDestroyDebugReportCallbackEXT_d>(destroyFuncPtr); destroyDel.Invoke(_instance, _debugCallbackHandle, null); } vkDestroyInstance(_instance, null); }
//IntPtr ptrCallback; private void InitDebugCallback(VkInstance instance) { var delDebugCallback = new PFN_vkDebugReportCallbackEXT(DebugCallback); //var info = new VkDebugReportCallbackCreateInfoEXT { sType = VkStructureType.DebugReportCallbackCreateInfoEXT }; VkDebugReportCallbackCreateInfoEXT info; info.sType = VkStructureType.DebugReportCallbackCreateInfoEXT; info.flags = VkDebugReportFlagBitsEXT.DebugEXT | VkDebugReportFlagBitsEXT.ErrorEXT | VkDebugReportFlagBitsEXT.PerformanceWarningEXT | VkDebugReportFlagBitsEXT.WarningEXT | VkDebugReportFlagBitsEXT.InformationEXT; var ptrCallback = Marshal.GetFunctionPointerForDelegate(delDebugCallback); info.pfnCallback = ptrCallback; VkDebugReportCallbackEXT callback; vkAPI.CreateDebugReportCallbackEXT(instance, &info, null, &callback).Check(); // or: instance.CreateDebugReportCallbackEXT(&info, null, &callback).Check(); this.debugReportcallback = callback; }
public void EnableDebugCallback(VkDebugReportFlagsEXT flags = VkDebugReportFlagsEXT.WarningEXT | VkDebugReportFlagsEXT.ErrorEXT) { Debug.WriteLine("Enabling Vulkan Debug callbacks."); _debugCallbackFunc = DebugCallback; IntPtr debugFunctionPtr = Marshal.GetFunctionPointerForDelegate(_debugCallbackFunc); VkDebugReportCallbackCreateInfoEXT debugCallbackCI = VkDebugReportCallbackCreateInfoEXT.New(); debugCallbackCI.flags = flags; debugCallbackCI.pfnCallback = debugFunctionPtr; IntPtr createFnPtr; using (FixedUtf8String debugExtFnName = "vkCreateDebugReportCallbackEXT") { createFnPtr = vkGetInstanceProcAddr(_instance, debugExtFnName); } vkCreateDebugReportCallbackEXT_d createDelegate = Marshal.GetDelegateForFunctionPointer <vkCreateDebugReportCallbackEXT_d>(createFnPtr); VkResult result = createDelegate(_instance, &debugCallbackCI, IntPtr.Zero, out _debugCallbackHandle); CheckResult(result); }
private unsafe void DestroyDebugReportCallback() { _debugCallbackFunction = null; if (_debugCallbackHandle != VkDebugReportCallbackEXT.Null) { var destroyFunctionPtr = VulkanNative.vkGetInstanceProcAddr( _handle, new FixedUtf8String("vkDestroyDebugReportCallbackEXT") ); var destroyDelegate = Marshal.GetDelegateForFunctionPointer <vkDestroyDebugReportCallbackEXT_d>( destroyFunctionPtr ); destroyDelegate( _handle, _debugCallbackHandle, null ); _debugCallbackHandle = VkDebugReportCallbackEXT.Null; } }