use draco_core::draco_types::DataType;
use draco_core::geometry_attribute::{GeometryAttributeType, PointAttribute};
pub(crate) fn make_f32x3_attribute(
attribute_type: GeometryAttributeType,
values: &[[f32; 3]],
) -> PointAttribute {
let mut attribute = PointAttribute::new();
attribute.init(attribute_type, 3, DataType::Float32, false, values.len());
let buffer = attribute.buffer_mut();
for (i, value) in values.iter().enumerate() {
let bytes: Vec<u8> = value
.iter()
.flat_map(|component| component.to_le_bytes())
.collect();
buffer.write(i * 12, &bytes);
}
attribute
}
#[cfg(any(feature = "obj-reader", feature = "ply-reader"))]
pub(crate) fn make_f32x2_attribute(
attribute_type: GeometryAttributeType,
values: &[[f32; 2]],
) -> PointAttribute {
let mut attribute = PointAttribute::new();
attribute.init(attribute_type, 2, DataType::Float32, false, values.len());
let buffer = attribute.buffer_mut();
for (i, value) in values.iter().enumerate() {
let bytes: Vec<u8> = value
.iter()
.flat_map(|component| component.to_le_bytes())
.collect();
buffer.write(i * 8, &bytes);
}
attribute
}