voxj_codec/
encode_voxj_file.rs1use crate::{
2 PositionEncoding, Result, SampleEncoding, encode_voxj_object, voxj_palette_cell_counts,
3};
4use voxj::{VoxjCodecFile, VoxjSerdeFile, VoxjSerdeMain};
5
6pub fn encode_voxj_file(
13 file: &VoxjCodecFile,
14 position: PositionEncoding,
15 sample: SampleEncoding,
16) -> Result<VoxjSerdeFile> {
17 let palettes = &file.main.palettes;
18 let objects = file
19 .main
20 .objects
21 .iter()
22 .map(|object| {
23 let cell_counts = voxj_palette_cell_counts(&object.palette_refs, palettes)?;
24 encode_voxj_object(object, &cell_counts, position, sample)
25 })
26 .collect::<Result<Vec<_>>>()?;
27 Ok(VoxjSerdeFile {
28 version: file.version,
29 main: VoxjSerdeMain {
30 objects,
31 palettes: palettes.clone(),
32 hierarchy_nodes: file.main.hierarchy_nodes.clone(),
33 root_hierarchy_nodes: file.main.root_hierarchy_nodes.clone(),
34 ext: file.main.ext.clone(),
35 },
36 })
37}