Function forsyth::order_triangles [−][src]
pub fn order_triangles<Index>(indices: &[Index]) -> Result<Vec<Index>, Error> where
Index: TryInto<usize> + Default + PartialEq + Copy,
Expand description
Creates an ordered triangle index buffer.
A convenience function that wraps order_triangles_in_place
to return a newly
allocated ordered index buffer.
This is equivalent to calling order_triangles_in_place
with default Config
and cache_size
of 32.
use forsyth::{Error,order_triangles};
// a triangle
assert_eq!(order_triangles(&[0, 1, 2]), Ok(vec![0, 1, 2]));
// a quad
assert_eq!(
order_triangles(&[0_u32, 1, 2, 0, 2, 3]),
Ok(vec![0, 1, 2, 0, 2, 3]),
);
assert_eq!(
order_triangles(&Vec::<u32>::new()),
Err(Error::IndicesNotTriples)
);
assert_eq!(
order_triangles(&[0, 1]),
Err(Error::IndicesNotTriples)
);
assert_eq!(
order_triangles(&[0, 1, 2, 3]),
Err(Error::IndicesNotTriples)
);
// Works with all (un-)signed integers
assert_eq!(
order_triangles(&[0_u8, 1, 2, 3, 4, 5]),
Ok(vec![0, 1, 2, 3, 4, 5])
);
assert_eq!(
order_triangles(&[0_i16, 1, 2, 3, 4, 5]),
Ok(vec![0, 1, 2, 3, 4, 5])
);
assert_eq!(
order_triangles(&[0_u32, 1, 2, 3, 4, 5]),
Ok(vec![0, 1, 2, 3, 4, 5])
);
assert_eq!(
order_triangles(&[0_i64, 1, 2, 3, 4, 5]),
Ok(vec![0, 1, 2, 3, 4, 5])
);
assert_eq!(
order_triangles(&[0_usize, 1, 2, 3, 4, 5]),
Ok(vec![0, 1, 2, 3, 4, 5])
);
// Indices can be sparse
assert_eq!(
order_triangles(&[0_i8, 1, 2, 63, 64, 65]),
Ok(vec![0, 1, 2, 63, 64, 65])
);
// Indices cannot be negative
assert_eq!(
order_triangles(&[0_i8, -1, -2, 63, 64, 65]),
Err(Error::IndexToUsizeConversion)
);