/// <summary> /// /// </summary> public static unsafe void SetDiscardRectangle(this SharpVk.CommandBuffer extendedHandle, uint firstDiscardRectangle, SharpVk.Rect2D[] discardRectangles) { try { CommandCache commandCache = default(CommandCache); SharpVk.Rect2D *marshalledDiscardRectangles = default(SharpVk.Rect2D *); commandCache = extendedHandle.commandCache; if (discardRectangles != null) { var fieldPointer = (SharpVk.Rect2D *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Rect2D>(discardRectangles.Length).ToPointer()); for (int index = 0; index < (uint)(discardRectangles.Length); index++) { fieldPointer[index] = discardRectangles[index]; } marshalledDiscardRectangles = fieldPointer; } else { marshalledDiscardRectangles = null; } SharpVk.Interop.Multivendor.VkCommandBufferSetDiscardRectangleDelegate commandDelegate = commandCache.GetCommandDelegate <SharpVk.Interop.Multivendor.VkCommandBufferSetDiscardRectangleDelegate>("vkCmdSetDiscardRectangleEXT", "instance"); commandDelegate(extendedHandle.handle, firstDiscardRectangle, (uint)(discardRectangles?.Length ?? 0), marshalledDiscardRectangles); } finally { Interop.HeapUtil.FreeAll(); } }
/// <summary> /// /// </summary> /// <param name="extendedHandle"> /// The CommandBuffer handle to extend. /// </param> public static unsafe void SetDiscardRectangle(this SharpVk.CommandBuffer extendedHandle, uint firstDiscardRectangle, ArrayProxy <SharpVk.Rect2D>?discardRectangles) { try { CommandCache commandCache = default(CommandCache); SharpVk.Rect2D *marshalledDiscardRectangles = default(SharpVk.Rect2D *); commandCache = extendedHandle.commandCache; if (discardRectangles.IsNull()) { marshalledDiscardRectangles = null; } else { if (discardRectangles.Value.Contents == ProxyContents.Single) { marshalledDiscardRectangles = (SharpVk.Rect2D *)(Interop.HeapUtil.Allocate <SharpVk.Rect2D>()); *(SharpVk.Rect2D *)(marshalledDiscardRectangles) = discardRectangles.Value.GetSingleValue(); } else { var fieldPointer = (SharpVk.Rect2D *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Rect2D>(Interop.HeapUtil.GetLength(discardRectangles.Value)).ToPointer()); for (int index = 0; index < (uint)(Interop.HeapUtil.GetLength(discardRectangles.Value)); index++) { fieldPointer[index] = discardRectangles.Value[index]; } marshalledDiscardRectangles = fieldPointer; } } SharpVk.Interop.Multivendor.VkCommandBufferSetDiscardRectangleDelegate commandDelegate = commandCache.GetCommandDelegate <SharpVk.Interop.Multivendor.VkCommandBufferSetDiscardRectangleDelegate>("vkCmdSetDiscardRectangleEXT", "instance"); commandDelegate(extendedHandle.handle, firstDiscardRectangle, (uint)(Interop.HeapUtil.GetLength(discardRectangles)), marshalledDiscardRectangles); } finally { Interop.HeapUtil.FreeAll(); } }