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;
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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;
 }
Beispiel #5
0
    /// <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;
 }
Beispiel #8
0
        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_);
        }