public unsafe bool Init(long size, VertexBufferLayout layout)
 {
     using (var layoutNative = new VertexBufferLayout_NativeInterop(ref layout))
     {
         return(Orbital_Video_D3D12_VertexBuffer_Init(handle, null, (ulong)size, sizeof(byte), &layoutNative) != 0);
     }
 }
 public unsafe bool Init <T>(T[] vertices, VertexBufferLayout layout) where T : unmanaged
 {
     using (var layoutNative = new VertexBufferLayout_NativeInterop(ref layout))
     {
         vertexCount = vertices.Length;
         vertexSize  = Marshal.SizeOf <T>();
         fixed(T *verticesPtr = vertices)
         {
             return(Orbital_Video_D3D12_VertexBuffer_Init(handle, verticesPtr, (ulong)vertices.LongLength, (uint)vertexSize, &layoutNative) != 0);
         }
     }
 }
        public unsafe bool Init <T>(T[] vertices, VertexBufferLayout layout) where T : struct
        {
            var layoutNative = new VertexBufferLayout_NativeInterop(ref layout);

            vertexCount = vertices.Length;
            vertexSize  = Marshal.SizeOf <T>();
            byte[] verticesDataCopy = new byte[vertexSize * vertices.Length];
            var    gcHandle         = GCHandle.Alloc(vertices, GCHandleType.Pinned);

            Marshal.Copy(gcHandle.AddrOfPinnedObject(), verticesDataCopy, 0, verticesDataCopy.Length);
            gcHandle.Free();
            fixed(byte *verticesPtr = verticesDataCopy)
            {
                return(Orbital_Video_D3D12_VertexBuffer_Init(handle, verticesPtr, (ulong)vertices.LongLength, (uint)vertexSize, &layoutNative) != 0);
            }
        }