]> O.S.I.I.S - jp/vke.net.git/commitdiff
`FromByteArray` is now `Unsafe`
authorShawdooow <banhammer1915@gmail.com>
Fri, 19 Nov 2021 21:12:21 +0000 (16:12 -0500)
committerj-p <jp_bruyere@hotmail.com>
Sat, 20 Nov 2021 21:26:59 +0000 (22:26 +0100)
vke/src/Utils.cs

index cce3964414a091e7bec737c84c78075c927c98ff..564e87c2228b370176cfea7253c07f35fc78d260 100644 (file)
@@ -85,36 +85,27 @@ namespace Vulkan {
                /// <summary>
                /// Populate a Vector2 with values from a byte array starting at offset
                /// </summary>
-               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<byte[], Vector2[]>(ref Unsafe.AsRef(byteArray.SubArray(offset, 8)))[0];
         }
                /// <summary>
                /// Populate a Vector3 with values from a byte array starting at offset
                /// </summary>
                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<byte[], Vector3[]>(ref Unsafe.AsRef(byteArray.SubArray(offset, 12)))[0];
+               }
                /// <summary>
                /// Populate a Vector4 with values from a byte array starting at offset
                /// </summary>
                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<byte[], Vector4[]>(ref Unsafe.AsRef(byteArray.SubArray(offset, 16)))[0];
+               }
                /// <summary>
                /// Populate a Quaternion with values from a byte array starting at offset
                /// </summary>
                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<byte[], Quaternion[]>(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<Vector4, Vector3>(ref v);
                }
+               public static T[] SubArray<T>(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