efab61a45c
- Introduced a constant `DEFAULT_UV_SCALE` for UV scaling. - Refactored UV mapping in `build_render_mesh` to use the new constant. - Simplified `compute_bounds` functions by extracting common logic into `compute_bounds_impl`. test(render-core): add tests for rendering with empty and multi-node models - Added tests to verify behavior when building render meshes from models with no slots and multiple nodes. - Ensured UV scaling is correctly applied in tests. feat(render-demo): add FOV argument and improve error handling - Added a `--fov` command-line argument to set the field of view. - Enhanced error messages for texture resolution failures. - Updated MVP computation to use the new FOV parameter. fix(rsli): improve error handling in LZH decompression - Added checks to prevent out-of-bounds access in LZH decoding logic. refactor(texm): streamline texture parsing and decoding tests - Created a helper function `build_texm_payload` for constructing test payloads. - Added tests for various texture formats including RGB565, RGB556, ARGB4444, and Luminance Alpha. - Improved error handling for invalid TEXM headers and mip bounds.
76 lines
1.9 KiB
Rust
76 lines
1.9 KiB
Rust
use core::fmt;
|
|
|
|
#[derive(Debug)]
|
|
#[non_exhaustive]
|
|
pub enum Error {
|
|
Nres(nres::error::Error),
|
|
MissingResource {
|
|
kind: u32,
|
|
label: &'static str,
|
|
},
|
|
InvalidResourceSize {
|
|
label: &'static str,
|
|
size: usize,
|
|
stride: usize,
|
|
},
|
|
InvalidRes2Size {
|
|
size: usize,
|
|
},
|
|
UnsupportedNodeStride {
|
|
stride: usize,
|
|
},
|
|
IndexOutOfBounds {
|
|
label: &'static str,
|
|
index: usize,
|
|
limit: usize,
|
|
},
|
|
IntegerOverflow,
|
|
}
|
|
|
|
impl From<nres::error::Error> for Error {
|
|
fn from(value: nres::error::Error) -> Self {
|
|
Self::Nres(value)
|
|
}
|
|
}
|
|
|
|
impl fmt::Display for Error {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
match self {
|
|
Self::Nres(err) => write!(f, "{err}"),
|
|
Self::MissingResource { kind, label } => {
|
|
write!(f, "missing required resource type={kind} ({label})")
|
|
}
|
|
Self::InvalidResourceSize {
|
|
label,
|
|
size,
|
|
stride,
|
|
} => {
|
|
write!(
|
|
f,
|
|
"invalid {label} size={size}, expected multiple of stride={stride}"
|
|
)
|
|
}
|
|
Self::InvalidRes2Size { size } => {
|
|
write!(f, "invalid Res2 size={size}, expected >= 140")
|
|
}
|
|
Self::UnsupportedNodeStride { stride } => {
|
|
write!(
|
|
f,
|
|
"unsupported Res1 node stride={stride}, expected 38 or 24"
|
|
)
|
|
}
|
|
Self::IndexOutOfBounds {
|
|
label,
|
|
index,
|
|
limit,
|
|
} => write!(
|
|
f,
|
|
"{label} index out of bounds: index={index}, limit={limit}"
|
|
),
|
|
Self::IntegerOverflow => write!(f, "integer overflow"),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl std::error::Error for Error {}
|