public static void Write(this GraphicBuffer buffer, byte[] data, int offset, int bytes, bool discard = true)
        {
            GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);

            unsafe
            {
                var ptr = ClrRuntime.Runtime.GetPointer(data, 0);
                try
                {
                    buffer.Write(ptr, offset, bytes, discard);
                }

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

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

                finally
                {
                    handle.Free();
                }
            }
        }