summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/src/material/asset.rs13
-rw-r--r--engine/src/model/asset.rs13
2 files changed, 20 insertions, 6 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),
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),