use draco_oxide_core::bit_coder::ByteWriter;
#[remain::sorted]
#[derive(thiserror::Error, Debug)]
pub enum Err {}
#[derive(Clone, Debug)]
pub enum EncodedGeometryType {
#[allow(unused)]
PointCloud,
TrianglarMesh,
}
impl EncodedGeometryType {
pub fn get_id(&self) -> u8 {
match self {
EncodedGeometryType::PointCloud => 0,
EncodedGeometryType::TrianglarMesh => 1,
}
}
}
const METADATA_FLAG_MASK: u16 = 32768;
pub fn encode_header<W>(writer: &mut W, cfg: &super::Config) -> Result<(), Err>
where
W: ByteWriter,
{
"DRACO".as_bytes().iter().for_each(|&b| {
writer.write_u8(b);
});
writer.write_u8(2);
writer.write_u8(2);
let id = cfg.geometry_type.get_id();
writer.write_u8(id);
cfg.connectivity.encoder_method().write_to(writer);
if cfg.metadata {
writer.write_u16(METADATA_FLAG_MASK);
} else {
writer.write_u16(0);
}
Ok(())
}