private void ReadVertexStream(Vector2[] targetArray, int arrayPos, Mesh meshData, VertexLayout.EntryInfo info)
        {
            Mesh.VertexStream stream = meshData.VertexStreams[info.streamIndex];

            for (int i = 0; i < meshData.VertexCount; i++)
            {
                targetArray[i + arrayPos] = ReadVector2(info.offset, stream, i, info.dataType);
            }
        }
        private Vector3 ReadVector3(int offset, Mesh.VertexStream vertexStream, int index, VertexLayout.Entry.DataTypes dataType)
        {
            Vector3 vector3 = new Vector3();

            switch (dataType)
            {
                case VertexLayout.Entry.DataTypes.Float3:
                    vector3.x = BitConverter.ToSingle(vertexStream.Data, (vertexStream.BytesPerVertex * index) + offset + 0);
                    vector3.y = BitConverter.ToSingle(vertexStream.Data, (vertexStream.BytesPerVertex * index) + offset + 4);
                    vector3.z = BitConverter.ToSingle(vertexStream.Data, (vertexStream.BytesPerVertex * index) + offset + 8);
                    break;
                default:
                    throw new InvalidDataException($"Unhandled stream DataType \"{dataType}\"");
            }

            return vector3;
        }
        private Vector2 ReadVector2(int offset, Mesh.VertexStream vertexStream, int index, VertexLayout.Entry.DataTypes dataType)
        {
            Vector2 vector2 = new Vector2();

            switch (dataType)
            {
                case VertexLayout.Entry.DataTypes.Float2:
                    vector2.x = BitConverter.ToSingle(vertexStream.Data, (vertexStream.BytesPerVertex * index) + offset + 0);
                    vector2.y = 1.0f - BitConverter.ToSingle(vertexStream.Data, (vertexStream.BytesPerVertex * index) + offset + 4);
                    break;
                case VertexLayout.Entry.DataTypes.float16_2:
                    vector2.x = Mathf.HalfToFloat(BitConverter.ToUInt16(vertexStream.Data, (vertexStream.BytesPerVertex * index) + offset + 0));
                    vector2.y = 1.0f - Mathf.HalfToFloat(BitConverter.ToUInt16(vertexStream.Data, (vertexStream.BytesPerVertex * index) + offset + 2));
                    break;
                default:
                    throw new InvalidDataException($"Unhandled stream DataType \"{dataType}\"");
            }

            return vector2;
        }