internal unsafe void __MarshalTo(ref __Native @ref) { @ref.NumEntries = Elements?.Length ?? 0; if (@ref.NumEntries > 0) { var nativeElements = (StreamOutputElement.__Native *)Interop.Alloc <StreamOutputElement.__Native>(@ref.NumEntries); for (int i = 0; i < @ref.NumEntries; i++) { Elements[i].__MarshalTo(ref nativeElements[i]); } @ref.pSODeclaration = nativeElements; } @ref.NumStrides = Strides?.Length ?? 0; if (@ref.NumStrides > 0) { var nativeStrides = Interop.Alloc <int>(@ref.NumStrides); fixed(int *src = &Strides[0]) { MemoryHelpers.CopyMemory(nativeStrides, (IntPtr)src, @ref.NumStrides * sizeof(int)); } @ref.pBufferStrides = nativeStrides; } @ref.RasterizedStream = RasterizedStream; }
public static unsafe AudioBuffer Create <T>(ReadOnlySpan <T> data, BufferFlags flags = BufferFlags.EndOfStream) where T : unmanaged { int sizeInBytes = data.Length * sizeof(T); IntPtr dataPtr = MemoryHelpers.AllocateMemory(data.Length); MemoryHelpers.CopyMemory(dataPtr, data); return(new AudioBuffer(flags, dataPtr, sizeInBytes, true)); }
public static unsafe AudioBuffer Create <T>(ReadOnlySpan <T> data, BufferFlags flags = BufferFlags.EndOfStream) where T : struct { var sizeInBytes = data.Length * Unsafe.SizeOf <T>(); var dataPtr = MemoryHelpers.AllocateMemory(data.Length); MemoryHelpers.CopyMemory(dataPtr, data); return(new AudioBuffer(flags, dataPtr, sizeInBytes, true)); }
internal unsafe void __MarshalTo(ref __Native @ref) { @ref.ByteStride = ByteStride; @ref.NumArgumentDescs = IndirectArguments?.Length ?? 0; if (@ref.NumArgumentDescs > 0) { @ref.pArgumentDescs = Interop.Alloc <IndirectArgumentDescription>(@ref.NumArgumentDescs); MemoryHelpers.CopyMemory( @ref.pArgumentDescs, (IntPtr)Unsafe.AsPointer(ref IndirectArguments[0]), @ref.NumArgumentDescs * sizeof(IndirectArgumentDescription)); } @ref.NodeMask = NodeMask; }
/// <summary> /// Initializes a new instance of the <see cref="AudioBuffer" /> class. /// </summary> /// <param name="stream">The stream to get the audio buffer from.</param> /// <param name="flags"></param> public AudioBuffer(DataStream stream, BufferFlags flags = BufferFlags.EndOfStream) { int length = (int)stream.Length - (int)stream.Position; unsafe { AudioDataPointer = new(MemoryHelpers.AllocateMemory((nuint)length)); MemoryHelpers.CopyMemory(AudioDataPointer, stream.PositionPointer, length); } Flags = flags; AudioBytes = (int)stream.Length; _ownsBuffer = true; }
public static Bitmap CaptureScreenFrames(int screenId) { var factory = DXGI.CreateDXGIFactory1 <IDXGIFactory1>(); var adapter = factory.GetAdapter(0); var output = adapter.GetOutput(screenId); var output1 = output.QueryInterface <IDXGIOutput1>(); D3D11.D3D11CreateDevice(adapter, DriverType.Unknown, DeviceCreationFlags.None, s_featureLevels, out var device); var bounds = output1.Description.DesktopCoordinates; var textureDesc = new Texture2DDescription { CpuAccessFlags = CpuAccessFlags.Read, BindFlags = BindFlags.None, Format = Format.B8G8R8A8_UNorm, Width = bounds.Right - bounds.Left, Height = bounds.Bottom - bounds.Top, OptionFlags = ResourceOptionFlags.None, MipLevels = 1, ArraySize = 1, SampleDescription = { Count = 1, Quality = 0 }, Usage = Vortice.Direct3D11.Usage.Staging }; var duplication = output1.DuplicateOutput(device); var currentFrame = device.CreateTexture2D(textureDesc); Thread.Sleep(100); duplication.AcquireNextFrame(500, out var frameInfo, out var desktopResource); var tempTexture = desktopResource.QueryInterface <ID3D11Texture2D>(); device.ImmediateContext.CopyResource(currentFrame, tempTexture); var dataBox = device.ImmediateContext.Map(currentFrame, 0, MapMode.Read, Vortice.Direct3D11.MapFlags.None); var frame = new Bitmap(1920, 1080, PixelFormat.Format32bppRgb); var mapDest = frame.LockBits(new Rectangle(0, 0, 1920, 1080), ImageLockMode.WriteOnly, frame.PixelFormat); for (int y = 0, sizeInBytesToCopy = 1920 * 4; y < 1080; y++) { MemoryHelpers.CopyMemory(mapDest.Scan0 + y * mapDest.Stride, dataBox.DataPointer + y * dataBox.RowPitch, sizeInBytesToCopy); } frame.UnlockBits(mapDest); return(frame); }
internal unsafe void __MarshalTo(ref __Native @ref) { @ref.ByteStride = ByteStride; @ref.NumArgumentDescs = IndirectArguments?.Length ?? 0; if (@ref.NumArgumentDescs > 0) { @ref.pArgumentDescs = UnsafeUtilities.Alloc <IndirectArgumentDescription>(@ref.NumArgumentDescs); fixed(void *indirectArgumentsPtr = &IndirectArguments[0]) { MemoryHelpers.CopyMemory( @ref.pArgumentDescs, (IntPtr)indirectArgumentsPtr, @ref.NumArgumentDescs * sizeof(IndirectArgumentDescription)); } } @ref.NodeMask = NodeMask; }
internal unsafe void __MarshalTo(ref __Native @ref) { @ref.Size = sizeof(__Native); @ref.Guid = Guid; IntPtr effectParameters = IntPtr.Zero; if (Parameters != null) { effectParameters = Marshal.AllocHGlobal(sizeof(EffectParameters.__Native)); var nativeParameters = default(EffectParameters.__Native); Parameters.__MarshalTo(ref nativeParameters); *((EffectParameters.__Native *)effectParameters) = nativeParameters; } @ref.EffectParametersPointer = effectParameters; IntPtr Name_ = Marshal.StringToHGlobalAnsi(Name); fixed(void *__ptr = & @ref.Name) { MemoryHelpers.CopyMemory((IntPtr)__ptr, Name_, Name.Length); } Marshal.FreeHGlobal(Name_); }