/// <summary> /// /// </summary> /// <param name="extendedHandle"> /// The Device handle to extend. /// </param> public static unsafe SharpVk.RenderPass CreateRenderPass2(this SharpVk.Device extendedHandle, SharpVk.Khronos.RenderPassCreateInfo2 createInfo, SharpVk.AllocationCallbacks?allocator = default(SharpVk.AllocationCallbacks?)) { try { SharpVk.RenderPass result = default(SharpVk.RenderPass); CommandCache commandCache = default(CommandCache); SharpVk.Interop.Khronos.RenderPassCreateInfo2 *marshalledCreateInfo = default(SharpVk.Interop.Khronos.RenderPassCreateInfo2 *); SharpVk.Interop.AllocationCallbacks * marshalledAllocator = default(SharpVk.Interop.AllocationCallbacks *); SharpVk.Interop.RenderPass marshalledRenderPass = default(SharpVk.Interop.RenderPass); commandCache = extendedHandle.commandCache; marshalledCreateInfo = (SharpVk.Interop.Khronos.RenderPassCreateInfo2 *)(Interop.HeapUtil.Allocate <SharpVk.Interop.Khronos.RenderPassCreateInfo2>()); createInfo.MarshalTo(marshalledCreateInfo); if (allocator != null) { marshalledAllocator = (SharpVk.Interop.AllocationCallbacks *)(Interop.HeapUtil.Allocate <SharpVk.Interop.AllocationCallbacks>()); allocator.Value.MarshalTo(marshalledAllocator); } else { marshalledAllocator = default(SharpVk.Interop.AllocationCallbacks *); } SharpVk.Interop.Khronos.VkDeviceCreateRenderPass2Delegate commandDelegate = commandCache.Cache.vkCreateRenderPass2KHR; Result methodResult = commandDelegate(extendedHandle.handle, marshalledCreateInfo, marshalledAllocator, &marshalledRenderPass); if (SharpVkException.IsError(methodResult)) { throw SharpVkException.Create(methodResult); } result = new SharpVk.RenderPass(extendedHandle, marshalledRenderPass); return(result); } finally { Interop.HeapUtil.FreeAll(); } }
/// <summary> /// /// </summary> public unsafe void BeginRenderPass(SharpVk.RenderPass renderPass, SharpVk.Framebuffer framebuffer, SharpVk.Rect2D renderArea, SharpVk.ClearValue[] clearValues, SharpVk.SubpassContents contents) { try { SharpVk.Interop.RenderPassBeginInfo *marshalledRenderPassBegin = default(SharpVk.Interop.RenderPassBeginInfo *); marshalledRenderPassBegin = (SharpVk.Interop.RenderPassBeginInfo *)(Interop.HeapUtil.Allocate <SharpVk.Interop.RenderPassBeginInfo>()); marshalledRenderPassBegin->SType = StructureType.RenderPassBeginInfo; marshalledRenderPassBegin->Next = null; marshalledRenderPassBegin->RenderPass = renderPass?.handle ?? default(SharpVk.Interop.RenderPass); marshalledRenderPassBegin->Framebuffer = framebuffer?.handle ?? default(SharpVk.Interop.Framebuffer); marshalledRenderPassBegin->RenderArea = renderArea; marshalledRenderPassBegin->ClearValueCount = (uint)(clearValues?.Length ?? 0); if (clearValues != null) { var fieldPointer = (SharpVk.ClearValue *)(Interop.HeapUtil.AllocateAndClear <SharpVk.ClearValue>(clearValues.Length).ToPointer()); for (int index = 0; index < (uint)(clearValues.Length); index++) { fieldPointer[index] = default(SharpVk.ClearValue); } marshalledRenderPassBegin->ClearValues = fieldPointer; } else { marshalledRenderPassBegin->ClearValues = null; } Interop.Commands.vkCmdBeginRenderPass(this.handle, marshalledRenderPassBegin, contents); } finally { Interop.HeapUtil.FreeAll(); } }