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; } }
//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; }
internal DebugReportCallbackExt(VkInstance parent, VkDebugReportFlagsEXT flags, Func <DebugReportCallbackInfo, bool> callback, IntPtr userData = default(IntPtr)) { Parent = parent; Func <DebugReportCallbackInfo, bool> createInfoCallback = callback; IntPtr callbackHandle = IntPtr.Zero; if (createInfoCallback != null) { _callback = (flags, objectType, @object, location, messageCode, layerPrefix, message, userData) => createInfoCallback(new DebugReportCallbackInfo { Flags = flags, ObjectType = objectType, Object = @object, Location = location, MessageCode = messageCode, LayerPrefix = Utilities.FromPointer(layerPrefix), Message = Utilities.FromPointer(message), UserData = userData }); callbackHandle = Marshal.GetFunctionPointerForDelegate(_callback); } var nativeCreateInfo = new VkDebugReportCallbackCreateInfoEXT { sType = VkStructureType.DebugReportCallbackCreateInfoEXT, flags = flags, pfnCallback = callbackHandle, pUserData = (void *)userData }; long handle; VkResult result = vkCreateDebugReportCallbackEXT(Parent)(Parent.Handle, &nativeCreateInfo, null, &handle); this.handle = (ulong)handle; }
public static extern void DestroyDebugReportCallbackEXT( VkInstance instance, VkDebugReportCallbackEXT callback, IntPtr pAllocator );
public static extern VkResult CreateDebugReportCallbackEXT( VkInstance instance, ref VkDebugReportCallbackCreateInfoEXT pCreateInfo, IntPtr pAllocator, out VkDebugReportCallbackEXT pCallback );
public void DestroyDebugReportCallback(VkDebugReportCallbackEXT callback) { m_ReportCallbacks.Remove(callback); }
public VkResult CreateDebugReportCallback(VkDebugReportCallbackCreateInfoEXT pCreateInfo, out VkDebugReportCallbackEXT pCallback) { pCallback = new VkDebugReportCallbackEXT(this, pCreateInfo); m_ReportCallbacks.Add(pCallback); return(VkResult.VK_SUCCESS); }