/// <summary>
        /// Create a new debug utils messenger providing a PFN_vkDebugUtilsMessengerCallbackEXT delegate.
        /// </summary>
        /// <param name="instance">Vulkan Instance.</param>
        /// <param name="onMessageDelegate">Message callback.</param>
        /// <param name="typeMask">Type mask.</param>
        /// <param name="severityMask">Severity mask.</param>
        public Messenger(Instance instance, PFN_vkDebugUtilsMessengerCallbackEXT onMessageDelegate,
                         VkDebugUtilsMessageTypeFlagsEXT typeMask =
                         VkDebugUtilsMessageTypeFlagsEXT.ValidationEXT,
                         VkDebugUtilsMessageSeverityFlagsEXT severityMask =
                         VkDebugUtilsMessageSeverityFlagsEXT.ErrorEXT |
                         VkDebugUtilsMessageSeverityFlagsEXT.WarningEXT)
        {
            inst = instance;
            VkDebugUtilsMessengerCreateInfoEXT info = VkDebugUtilsMessengerCreateInfoEXT.New();

            info.messageType     = typeMask;
            info.messageSeverity = severityMask;
            info.pfnUserCallback = Marshal.GetFunctionPointerForDelegate(onMessageDelegate);
            info.pUserData       = IntPtr.Zero;

            Utils.CheckResult(vkCreateDebugUtilsMessengerEXT(inst.VkInstance, ref info, IntPtr.Zero, out handle));
        }
Beispiel #2
0
        private VkDebugUtilsMessengerEXT CreateDebugMessenger(PFN_vkDebugUtilsMessengerCallbackEXT callback)
        {
            var createInfo = new VkDebugUtilsMessengerCreateInfoEXT
            {
                sType           = VkStructureType.VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,
                messageSeverity = VkDebugUtilsMessageSeverityFlagsEXT.Verbose | VkDebugUtilsMessageSeverityFlagsEXT.Warning | VkDebugUtilsMessageSeverityFlagsEXT.Error,
                messageType     = VkDebugUtilsMessageTypeFlagsEXT.General | VkDebugUtilsMessageTypeFlagsEXT.Validation | VkDebugUtilsMessageTypeFlagsEXT.Performance,
                pfnUserCallback = Marshal.GetFunctionPointerForDelegate(callback),
                pUserData       = null
            };

            trackedDelegates.Add(callback);

            var result = VK.CreateDebugUtilsMessengerEXT(Instance, &createInfo, null, out var messenger);

            if (result != VkResult.Success)
            {
                throw new Exception(result.ToString());
            }

            return(messenger);
        }