public void CmdCopyImage(IMgImage srcImage, MgImageLayout srcImageLayout, IMgImage dstImage, MgImageLayout dstImageLayout, MgImageCopy[] pRegions) { var bSrcImage = (VkImage)srcImage; Debug.Assert(bSrcImage != null); var bDstImage = (VkImage)dstImage; Debug.Assert(bDstImage != null); var handle = GCHandle.Alloc(pRegions, GCHandleType.Pinned); try { unsafe { var regionCount = (uint)pRegions.Length; var region = handle.AddrOfPinnedObject(); MgImageCopy *regions = (MgImageCopy *)region.ToPointer(); Interops.vkCmdCopyImage(this.Handle, bSrcImage.Handle, (VkImageLayout)srcImageLayout, bDstImage.Handle, (VkImageLayout)dstImageLayout, regionCount, regions); } } finally { handle.Free(); } }