use nalgebra::RealField;
use num_traits::ToPrimitive;
use serde::{Deserialize, Serialize};
use std::{path::PathBuf, str::FromStr};
use crate::{bvh::BvhConfig, error::Result, geometry::Mesh, scene::Assets};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SerializedAssets<T: RealField + Copy + ToPrimitive> {
pub bvh_config: Option<BvhConfig<T>>,
pub meshes: Vec<(String, PathBuf)>, }
impl<T: RealField + Copy + ToPrimitive + FromStr> SerializedAssets<T> {
pub fn build(self) -> Result<Assets<T>> {
let bvh_config = self.bvh_config.unwrap_or_default();
let mut assets = Assets::empty(bvh_config.clone());
for (name, path) in self.meshes {
let mesh = Mesh::load(&bvh_config, path);
assets = assets.add_mesh(&name, mesh?)?;
}
Ok(assets)
}
}