diff options
| author | HampusM <hampus@hampusmat.com> | 2026-09-15 13:21:52 +0200 |
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2026-09-15 13:21:52 +0200 |
| commit | 680b8123fa00ad4861c2e6a75b68673fa1df8ce0 (patch) | |
| tree | ef51fbfeba85228c68935df56c5767cbc1980b9e /engine/src/model | |
| parent | 1cbe628b295b52a4230301f89716e8aca7def2a2 (diff) | |
fix(engine): treat file paths in obj & mtl assets as relative to file
Diffstat (limited to 'engine/src/model')
| -rw-r--r-- | engine/src/model/asset.rs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/engine/src/model/asset.rs b/engine/src/model/asset.rs index dd9e60b..69a06aa 100644 --- a/engine/src/model/asset.rs +++ b/engine/src/model/asset.rs @@ -20,6 +20,10 @@ fn import_wavefront_obj_asset( _settings: Option<&'_ Settings>, ) -> Result<(), Error> { + let parent_path = path + .parent() + .ok_or_else(|| Error::InvalidPath(path.to_path_buf()))?; + let obj = crate::file_format::wavefront::obj::parse( &read_to_string(path) .map_err(|err| Error::ReadFailed(err, path.to_path_buf()))?, @@ -29,11 +33,11 @@ fn import_wavefront_obj_asset( let mesh_asset = asset_submitter.submit_store_named("mesh", mesh); - let mut material_asset_map_assets = Vec::with_capacity(obj.mtl_libs.iter().count()); + let mut material_asset_map_assets = Vec::with_capacity(obj.mtl_libs.len()); for mtl_lib_path in &obj.mtl_libs { - let mtl_lib_asset = - asset_submitter.submit_load_other::<MaterialAssetMap>(mtl_lib_path.as_path()); + let mtl_lib_asset = asset_submitter + .submit_load_other::<MaterialAssetMap>(parent_path.join(mtl_lib_path)); material_asset_map_assets.push(mtl_lib_asset); } @@ -56,6 +60,9 @@ fn import_wavefront_obj_asset( #[derive(Debug, thiserror::Error)] enum Error { + #[error("Invalid path '{}'", .0.display())] + InvalidPath(PathBuf), + #[error("Failed to read file {}", .1.display())] ReadFailed(#[source] std::io::Error, PathBuf), |
