use draco_core::*;
#[test]
fn test_mesh_encoder_basic() {
let mut mesh = Mesh::new();
let mut pos_att = PointAttribute::new();
pos_att.init(
GeometryAttributeType::Position,
3, DataType::Int32,
false,
3, );
{
let buffer = pos_att.buffer_mut();
buffer.write(0, &0i32.to_le_bytes());
buffer.write(4, &0i32.to_le_bytes());
buffer.write(8, &0i32.to_le_bytes());
buffer.write(12, &10i32.to_le_bytes());
buffer.write(16, &0i32.to_le_bytes());
buffer.write(20, &0i32.to_le_bytes());
buffer.write(24, &0i32.to_le_bytes());
buffer.write(28, &10i32.to_le_bytes());
buffer.write(32, &0i32.to_le_bytes());
}
pos_att.set_identity_mapping();
mesh.add_attribute(pos_att);
mesh.add_face([PointIndex(0), PointIndex(1), PointIndex(2)]);
let mut encoder = MeshEncoder::new();
encoder.set_mesh(mesh);
let mut options = EncoderOptions::default();
options.set_global_int("store_number_of_encoded_faces", 1);
let mut out_buffer = EncoderBuffer::new();
let result = encoder.encode(&options, &mut out_buffer);
assert!(result.is_ok(), "Encoding should succeed");
assert!(out_buffer.size() > 0, "Output buffer should not be empty");
assert_eq!(encoder.num_encoded_faces(), 1);
}
#[test]
fn test_mesh_encoder_with_corner_table() {
let mut mesh = Mesh::new();
let mut pos_att = PointAttribute::new();
pos_att.init(
GeometryAttributeType::Position,
3, DataType::Int32,
false,
4, );
{
let buffer = pos_att.buffer_mut();
buffer.write(0, &0i32.to_le_bytes());
buffer.write(4, &0i32.to_le_bytes());
buffer.write(8, &0i32.to_le_bytes());
buffer.write(12, &10i32.to_le_bytes());
buffer.write(16, &0i32.to_le_bytes());
buffer.write(20, &0i32.to_le_bytes());
buffer.write(24, &10i32.to_le_bytes());
buffer.write(28, &10i32.to_le_bytes());
buffer.write(32, &0i32.to_le_bytes());
buffer.write(36, &0i32.to_le_bytes());
buffer.write(40, &10i32.to_le_bytes());
buffer.write(44, &0i32.to_le_bytes());
}
pos_att.set_identity_mapping();
mesh.add_attribute(pos_att);
mesh.add_face([PointIndex(0), PointIndex(1), PointIndex(2)]);
mesh.add_face([PointIndex(0), PointIndex(2), PointIndex(3)]);
let mut encoder = MeshEncoder::new();
encoder.set_mesh(mesh);
let options = EncoderOptions::default();
let mut out_buffer = EncoderBuffer::new();
let result = encoder.encode(&options, &mut out_buffer);
assert!(result.is_ok(), "Encoding should succeed");
assert!(
encoder.corner_table().is_some(),
"Corner table should be created"
);
let corner_table = encoder.corner_table().unwrap();
assert_eq!(corner_table.num_faces(), 2);
assert_eq!(corner_table.num_corners(), 6); }