Accept finite negative material RGB coefficients
Docs Deploy / Build and Deploy MkDocs (push) Successful in 36s

This commit is contained in:
Valentin Popov committed 2026-10-18 00:33:21 +04:00
1 parent 77ad6f0256
commit 8bc22d4f06
2 files changed
+28 -14

No files matched your search

@@ -1091,10 +1091,10 @@ impl VulkanSmokeRenderer {
.chain(additive_rgb) .chain(additive_rgb)
.chain(overlay_directional_rgb.into_iter().flatten()) .chain(overlay_directional_rgb.into_iter().flatten())
.chain(overlay_additive_rgb.into_iter().flatten()) .chain(overlay_additive_rgb.into_iter().flatten())
.any(|value| !value.is_finite() || value < 0.0) .any(|value| !value.is_finite())
{ {
return Err(VulkanSmokeRendererError::InvalidStaticMesh { return Err(VulkanSmokeRendererError::InvalidStaticMesh {
context: "dynamic material lighting must be finite and non-negative", context: "dynamic material lighting must be finite",
}); });
} }
let lighting = self.material_lighting.get_mut(material_index).ok_or( let lighting = self.material_lighting.get_mut(material_index).ok_or(
@@ -1155,10 +1155,10 @@ impl VulkanSmokeRenderer {
if specular_rgb if specular_rgb
.into_iter() .into_iter()
.chain(overlay_specular_rgb.into_iter().flatten()) .chain(overlay_specular_rgb.into_iter().flatten())
.any(|value| !value.is_finite() || value < 0.0) .any(|value| !value.is_finite())
{ {
return Err(VulkanSmokeRendererError::InvalidStaticMesh { return Err(VulkanSmokeRendererError::InvalidStaticMesh {
context: "dynamic material specular RGB must be finite and non-negative", context: "dynamic material specular RGB must be finite",
}); });
} }
let specular = self.material_specular.get_mut(material_index).ok_or( let specular = self.material_specular.get_mut(material_index).ok_or(
@@ -622,9 +622,9 @@ pub(super) fn resolve_draw_texture_indices(
.chain(material.additive_rgb) .chain(material.additive_rgb)
.chain(material.specular_rgb) .chain(material.specular_rgb)
.chain(material.overlay_specular_rgb.into_iter().flatten()) .chain(material.overlay_specular_rgb.into_iter().flatten())
.any(|value| !value.is_finite() || value < 0.0) .any(|value| !value.is_finite())
{ {
return Err("static material lighting and specular RGB parameters must be finite and non-negative"); return Err("static material lighting and specular RGB parameters must be finite");
} }
if material if material
.uv_transform .uv_transform
@@ -645,9 +645,9 @@ pub(super) fn resolve_draw_texture_indices(
.into_iter() .into_iter()
.flatten() .flatten()
.chain(material.overlay_additive_rgb.into_iter().flatten()) .chain(material.overlay_additive_rgb.into_iter().flatten())
.any(|value| !value.is_finite() || value < 0.0) .any(|value| !value.is_finite())
{ {
return Err("static material overlay RGB parameters must be finite and non-negative"); return Err("static material overlay RGB parameters must be finite");
} }
if material if material
.overlay_uv_transform .overlay_uv_transform
@@ -1012,15 +1012,15 @@ mod static_mesh_tests {
overlay_detail_texture: None, overlay_detail_texture: None,
diffuse_alpha: 1.0, diffuse_alpha: 1.0,
overlay_diffuse_alpha: None, overlay_diffuse_alpha: None,
directional_rgb: [1.0; 3], directional_rgb: [-0.25; 3],
additive_rgb: [0.0; 3], additive_rgb: [-0.5; 3],
specular_rgb: [0.0; 3], specular_rgb: [-0.75; 3],
specular_power: 0, specular_power: 0,
overlay_specular_rgb: None, overlay_specular_rgb: Some([-1.0; 3]),
overlay_specular_power: None, overlay_specular_power: None,
uv_transform: [0.0, 0.0, 1.0, 1.0], uv_transform: [0.0, 0.0, 1.0, 1.0],
overlay_directional_rgb: None, overlay_directional_rgb: Some([-0.125; 3]),
overlay_additive_rgb: None, overlay_additive_rgb: Some([-0.375; 3]),
detail_uv_transform: [0.0, 0.0, 1.0, 1.0], detail_uv_transform: [0.0, 0.0, 1.0, 1.0],
overlay_uv_transform: None, overlay_uv_transform: None,
overlay_detail_uv_transform: None, overlay_detail_uv_transform: None,
@@ -1061,6 +1061,20 @@ mod static_mesh_tests {
resolve_draw_texture_indices(&ranges, &materials), resolve_draw_texture_indices(&ranges, &materials),
Ok(vec![1, 0]) Ok(vec![1, 0])
); );
let mut non_finite_base = materials.clone();
non_finite_base[0].specular_rgb[0] = f32::NAN;
assert_eq!(
resolve_draw_texture_indices(&ranges, &non_finite_base),
Err("static material lighting and specular RGB parameters must be finite")
);
let mut non_finite_overlay = materials.clone();
non_finite_overlay[0].overlay_additive_rgb = Some([f32::INFINITY, 0.0, 0.0]);
assert_eq!(
resolve_draw_texture_indices(&ranges, &non_finite_overlay),
Err("static material overlay RGB parameters must be finite")
);
} }
#[test] #[test]