From: Shawdooow Date: Fri, 19 Nov 2021 21:12:21 +0000 (-0500) Subject: `FromByteArray` is now `Unsafe` X-Git-Tag: v0.2.4-beta~23 X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=6efda991e8864b511ddb251e7a72225d76f0d06e;p=jp%2Fvke.net.git `FromByteArray` is now `Unsafe` --- diff --git a/vke/src/Utils.cs b/vke/src/Utils.cs index cce3964..564e87c 100644 --- a/vke/src/Utils.cs +++ b/vke/src/Utils.cs @@ -85,36 +85,27 @@ namespace Vulkan { /// /// Populate a Vector2 with values from a byte array starting at offset /// - public static void FromByteArray (ref Vector2 v, byte[] byteArray, int offset, int length = 8) { - v.X = BitConverter.ToSingle (byteArray, offset); - v.Y = BitConverter.ToSingle (byteArray, offset + 4); + public static void FromByteArray (ref Vector2 v, byte[] byteArray, int offset) { + v = Unsafe.As(ref Unsafe.AsRef(byteArray.SubArray(offset, 8)))[0]; } /// /// Populate a Vector3 with values from a byte array starting at offset /// public static void FromByteArray (ref Vector3 v, byte[] byteArray, int offset) { - v.X = BitConverter.ToSingle (byteArray, offset); - v.Y = BitConverter.ToSingle (byteArray, offset + 4); - v.Z = BitConverter.ToSingle (byteArray, offset + 8); - } + v = Unsafe.As(ref Unsafe.AsRef(byteArray.SubArray(offset, 12)))[0]; + } /// /// Populate a Vector4 with values from a byte array starting at offset /// public static void FromByteArray (ref Vector4 v, byte[] byteArray, int offset) { - v.X = BitConverter.ToSingle (byteArray, offset); - v.Y = BitConverter.ToSingle (byteArray, offset + 4); - v.Z = BitConverter.ToSingle (byteArray, offset + 8); - v.W = BitConverter.ToSingle (byteArray, offset + 12); - } + v = Unsafe.As(ref Unsafe.AsRef(byteArray.SubArray(offset, 16)))[0]; + } /// /// Populate a Quaternion with values from a byte array starting at offset /// public static void FromByteArray (ref Quaternion v, byte[] byteArray, int offset) { - v.X = BitConverter.ToSingle (byteArray, offset); - v.Y = BitConverter.ToSingle (byteArray, offset + 4); - v.Z = BitConverter.ToSingle (byteArray, offset + 8); - v.W = BitConverter.ToSingle (byteArray, offset + 12); - } + v = Unsafe.As(ref Unsafe.AsRef(byteArray.SubArray(offset, 16)))[0]; + } #region Extensions methods public static void ImportFloatArray (this ref Vector3 v, float[] floats) { @@ -127,6 +118,12 @@ namespace Vulkan { public static Vector3 ToVector3 (this Vector4 v) { return Unsafe.As(ref v); } + public static T[] SubArray(this T[] array, int offset, int length) + { + T[] result = new T[length]; + Array.Copy(array, offset, result, 0, length); + return result; + } #endregion // Fixed sub resource on first mip level and layer