diff options
Diffstat (limited to 'engine/src/material/asset.rs')
| -rw-r--r-- | engine/src/material/asset.rs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/engine/src/material/asset.rs b/engine/src/material/asset.rs index b210154..31d4ce5 100644 --- a/engine/src/material/asset.rs +++ b/engine/src/material/asset.rs @@ -28,6 +28,10 @@ fn import_wavefront_mtl_asset( _settings: Option<&'_ Settings>, ) -> Result<(), Error> { + let parent_path = path + .parent() + .ok_or_else(|| Error::InvalidPath(path.to_path_buf()))?; + let named_materials = crate::file_format::wavefront::mtl::parse( &read_to_string(path) .map_err(|err| Error::ReadFailed(err, path.to_path_buf()))?, @@ -46,19 +50,19 @@ fn import_wavefront_mtl_asset( if let Some(ambient_map) = material.ambient_map { material_builder = material_builder.ambient_map( - asset_submitter.submit_load_other(ambient_map.path.as_path()), + asset_submitter.submit_load_other(parent_path.join(&ambient_map.path)), ); } if let Some(diffuse_map) = material.diffuse_map { material_builder = material_builder.diffuse_map( - asset_submitter.submit_load_other(diffuse_map.path.as_path()), + asset_submitter.submit_load_other(parent_path.join(&diffuse_map.path)), ); } if let Some(specular_map) = material.specular_map { material_builder = material_builder.specular_map( - asset_submitter.submit_load_other(specular_map.path.as_path()), + asset_submitter.submit_load_other(parent_path.join(&specular_map.path)), ); } @@ -81,6 +85,9 @@ fn import_wavefront_mtl_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), |
