public static void Read(this GraphicBuffer buffer, byte[] data, int offset, int bytes)
        {
            unsafe
            {
                GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
                var      ptr    = ClrRuntime.Runtime.GetPointer(data, 0);

                try
                {
                    buffer.Read(ptr, offset, bytes);
                }

                finally
                {
                    handle.Free();
                }
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="data">array</param>
        /// <param name="offset">Offset in bytes to start reading</param>
        public static void Read <T>(this GraphicBuffer buffer, T[] data, int offset = 0)
            where T : struct
        {
            unsafe
            {
                GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
                var      ptr    = ClrRuntime.Runtime.GetPointer(data, 0);

                try
                {
                    buffer.Read(ptr, offset, ClrRuntime.Runtime.SizeOf <T>() * data.Length);
                }

                finally
                {
                    handle.Free();
                }
            }
        }
 public static T[] ToArray <T>(this GraphicBuffer buffer) where T : struct
 {
     T[] data = new T[buffer.SizeInBytes / ClrRuntime.Runtime.SizeOf <T>()];
     buffer.Read(data);
     return(data);
 }