/// <summary> /// /// </summary> internal unsafe void MarshalTo(SharpVk.Interop.NVidia.CoarseSampleOrderCustom *pointer) { pointer->ShadingRate = this.ShadingRate; pointer->SampleCount = this.SampleCount; pointer->SampleLocationCount = (uint)(Interop.HeapUtil.GetLength(this.SampleLocations)); if (this.SampleLocations != null) { var fieldPointer = (SharpVk.NVidia.CoarseSampleLocation *)(Interop.HeapUtil.AllocateAndClear <SharpVk.NVidia.CoarseSampleLocation>(this.SampleLocations.Length).ToPointer()); for (int index = 0; index < (uint)(this.SampleLocations.Length); index++) { fieldPointer[index] = this.SampleLocations[index]; } pointer->SampleLocations = fieldPointer; } else { pointer->SampleLocations = null; } }
/// <summary> /// /// </summary> internal static unsafe CoarseSampleOrderCustom MarshalFrom(SharpVk.Interop.NVidia.CoarseSampleOrderCustom *pointer) { CoarseSampleOrderCustom result = default(CoarseSampleOrderCustom); result.ShadingRate = pointer->ShadingRate; result.SampleCount = pointer->SampleCount; if (pointer->SampleLocations != null) { var fieldPointer = new SharpVk.NVidia.CoarseSampleLocation[(uint)(pointer->SampleLocationCount)]; for (int index = 0; index < (uint)(pointer->SampleLocationCount); index++) { fieldPointer[index] = pointer->SampleLocations[index]; } result.SampleLocations = fieldPointer; } else { result.SampleLocations = null; } return(result); }
/// <summary> /// /// </summary> /// <param name="extendedHandle"> /// The CommandBuffer handle to extend. /// </param> /// <param name="sampleOrderType"> /// </param> /// <param name="customSampleOrders"> /// </param> public static unsafe void SetCoarseSampleOrder(this SharpVk.CommandBuffer extendedHandle, SharpVk.NVidia.CoarseSampleOrderType sampleOrderType, ArrayProxy <SharpVk.NVidia.CoarseSampleOrderCustom>?customSampleOrders) { try { CommandCache commandCache = default(CommandCache); SharpVk.Interop.NVidia.CoarseSampleOrderCustom *marshalledCustomSampleOrders = default(SharpVk.Interop.NVidia.CoarseSampleOrderCustom *); commandCache = extendedHandle.commandCache; if (customSampleOrders.IsNull()) { marshalledCustomSampleOrders = null; } else { if (customSampleOrders.Value.Contents == ProxyContents.Single) { marshalledCustomSampleOrders = (SharpVk.Interop.NVidia.CoarseSampleOrderCustom *)(Interop.HeapUtil.Allocate <SharpVk.Interop.NVidia.CoarseSampleOrderCustom>()); customSampleOrders.Value.GetSingleValue().MarshalTo(&*(SharpVk.Interop.NVidia.CoarseSampleOrderCustom *)(marshalledCustomSampleOrders)); } else { var fieldPointer = (SharpVk.Interop.NVidia.CoarseSampleOrderCustom *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.NVidia.CoarseSampleOrderCustom>(Interop.HeapUtil.GetLength(customSampleOrders.Value)).ToPointer()); for (int index = 0; index < (uint)(Interop.HeapUtil.GetLength(customSampleOrders.Value)); index++) { customSampleOrders.Value[index].MarshalTo(&fieldPointer[index]); } marshalledCustomSampleOrders = fieldPointer; } } SharpVk.Interop.NVidia.VkCommandBufferSetCoarseSampleOrderDelegate commandDelegate = commandCache.Cache.vkCmdSetCoarseSampleOrderNV; commandDelegate(extendedHandle.handle, sampleOrderType, (uint)(Interop.HeapUtil.GetLength(customSampleOrders)), marshalledCustomSampleOrders); } finally { Interop.HeapUtil.FreeAll(); } }