Beispiel #1
0
        public static unsafe BufferView CreateBufferView <T>(this ModelRoot root, IReadOnlyList <T> data)
            where T : unmanaged
        {
            Guard.NotNull(root, nameof(root));
            Guard.NotNull(data, nameof(data));

            var view = root.CreateBufferView(sizeof(T) * data.Count);

            if (typeof(T) == typeof(int))
            {
                new Memory.IntegerArray(view.Content, IndexEncodingType.UNSIGNED_INT).Fill(data as IReadOnlyList <int>);
                return(view);
            }

            if (typeof(T) == typeof(Single))
            {
                new Memory.ScalarArray(view.Content).Fill(data as IReadOnlyList <Single>);
                return(view);
            }

            if (typeof(T) == typeof(Vector2))
            {
                new Memory.Vector2Array(view.Content).Fill(data as IReadOnlyList <Vector2>);
                return(view);
            }

            if (typeof(T) == typeof(Vector3))
            {
                new Memory.Vector3Array(view.Content).Fill(data as IReadOnlyList <Vector3>);
                return(view);
            }

            if (typeof(T) == typeof(Vector4))
            {
                new Memory.Vector4Array(view.Content).Fill(data as IReadOnlyList <Vector4>);
                return(view);
            }

            if (typeof(T) == typeof(Quaternion))
            {
                new Memory.QuaternionArray(view.Content).Fill(data as IReadOnlyList <Quaternion>);
                return(view);
            }

            if (typeof(T) == typeof(Matrix4x4))
            {
                new Memory.Matrix4x4Array(view.Content).Fill(data as IReadOnlyList <Matrix4x4>);
                return(view);
            }

            throw new ArgumentException(typeof(T).Name);
        }