/// <summary> /// /// </summary> internal static unsafe DebugUtilsMessengerCallbackData MarshalFrom(SharpVk.Interop.Multivendor.DebugUtilsMessengerCallbackData *pointer) { DebugUtilsMessengerCallbackData result = default(DebugUtilsMessengerCallbackData); result.Flags = pointer->Flags; result.MessageIdName = Interop.HeapUtil.MarshalStringFrom(pointer->MessageIdName); result.MessageIdNumber = pointer->MessageIdNumber; result.Message = Interop.HeapUtil.MarshalStringFrom(pointer->Message); if (pointer->QueueLabels == null) { result.QueueLabels = null; } else { result.QueueLabels = new DebugUtilsLabel[pointer->QueueLabelCount]; for (int index = 0; index < (uint)(result.QueueLabels.Length); index++) { result.QueueLabels[index] = SharpVk.Multivendor.DebugUtilsLabel.MarshalFrom(&pointer->QueueLabels[index]); } } if (pointer->CommandBufLabels == null) { result.CommandBufLabels = null; } else { result.CommandBufLabels = new DebugUtilsLabel[pointer->CommandBufLabelCount]; for (int index = 0; index < (uint)(result.CommandBufLabels.Length); index++) { result.CommandBufLabels[index] = SharpVk.Multivendor.DebugUtilsLabel.MarshalFrom(&pointer->CommandBufLabels[index]); } } if (pointer->Objects == null) { result.Objects = null; } else { result.Objects = new DebugUtilsObjectNameInfo[pointer->ObjectCount]; for (int index = 0; index < (uint)(result.Objects.Length); index++) { result.Objects[index] = SharpVk.Multivendor.DebugUtilsObjectNameInfo.MarshalFrom(&pointer->Objects[index]); } } return(result); }
/// <summary> /// /// </summary> /// <param name="extendedHandle"> /// The Instance handle to extend. /// </param> public static unsafe void SubmitDebugUtilsMessage(this SharpVk.Instance extendedHandle, SharpVk.Multivendor.DebugUtilsMessageSeverityFlags messageSeverity, SharpVk.Multivendor.DebugUtilsMessageTypeFlags messageTypes, SharpVk.Multivendor.DebugUtilsMessengerCallbackData callbackData) { try { CommandCache commandCache = default(CommandCache); SharpVk.Interop.Multivendor.DebugUtilsMessengerCallbackData *marshalledCallbackData = default(SharpVk.Interop.Multivendor.DebugUtilsMessengerCallbackData *); commandCache = extendedHandle.commandCache; marshalledCallbackData = (SharpVk.Interop.Multivendor.DebugUtilsMessengerCallbackData *)(Interop.HeapUtil.Allocate <SharpVk.Interop.Multivendor.DebugUtilsMessengerCallbackData>()); callbackData.MarshalTo(marshalledCallbackData); SharpVk.Interop.Multivendor.VkInstanceSubmitDebugUtilsMessageDelegate commandDelegate = commandCache.Cache.vkSubmitDebugUtilsMessageEXT; commandDelegate(extendedHandle.handle, messageSeverity, messageTypes, marshalledCallbackData); } finally { Interop.HeapUtil.FreeAll(); } }
/// <summary> /// /// </summary> internal unsafe void MarshalTo(SharpVk.Interop.Multivendor.DebugUtilsMessengerCallbackData *pointer) { pointer->SType = StructureType.DebugUtilsMessengerCallbackData; pointer->Next = null; if (this.Flags != null) { pointer->Flags = this.Flags.Value; } else { pointer->Flags = default(SharpVk.Multivendor.DebugUtilsMessengerCallbackDataFlags); } pointer->MessageIdName = Interop.HeapUtil.MarshalTo(this.MessageIdName); if (this.MessageIdNumber != null) { pointer->MessageIdNumber = this.MessageIdNumber.Value; } else { pointer->MessageIdNumber = default(int); } pointer->Message = Interop.HeapUtil.MarshalTo(this.Message); pointer->QueueLabelCount = (uint)(Interop.HeapUtil.GetLength(this.QueueLabels)); if (this.QueueLabels != null) { var fieldPointer = (SharpVk.Interop.Multivendor.DebugUtilsLabel *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.Multivendor.DebugUtilsLabel>(this.QueueLabels.Length).ToPointer()); for (int index = 0; index < (uint)(this.QueueLabels.Length); index++) { this.QueueLabels[index].MarshalTo(&fieldPointer[index]); } pointer->QueueLabels = fieldPointer; } else { pointer->QueueLabels = null; } pointer->CommandBufLabelCount = (uint)(Interop.HeapUtil.GetLength(this.CommandBufLabels)); if (this.CommandBufLabels != null) { var fieldPointer = (SharpVk.Interop.Multivendor.DebugUtilsLabel *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.Multivendor.DebugUtilsLabel>(this.CommandBufLabels.Length).ToPointer()); for (int index = 0; index < (uint)(this.CommandBufLabels.Length); index++) { this.CommandBufLabels[index].MarshalTo(&fieldPointer[index]); } pointer->CommandBufLabels = fieldPointer; } else { pointer->CommandBufLabels = null; } pointer->ObjectCount = (uint)(Interop.HeapUtil.GetLength(this.Objects)); if (this.Objects != null) { var fieldPointer = (SharpVk.Interop.Multivendor.DebugUtilsObjectNameInfo *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.Multivendor.DebugUtilsObjectNameInfo>(this.Objects.Length).ToPointer()); for (int index = 0; index < (uint)(this.Objects.Length); index++) { this.Objects[index].MarshalTo(&fieldPointer[index]); } pointer->Objects = fieldPointer; } else { pointer->Objects = null; } }