diff options
| author | Valentin Popov <valentin@popov.link> | 2026-10-17 23:33:21 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-10-17 23:33:21 +0300 |
| commit | 8bc22d4f06ca9bb939acfea78ebb038039fce0ce (patch) | |
| tree | f9d7672e99c8d74770073f3657e03557f16d11c4 /adapters | |
| parent | 77ad6f02568e5a32530280eb72f261179a7b8501 (diff) | |
| download | fparkan-8bc22d4f06ca9bb939acfea78ebb038039fce0ce.tar.xz fparkan-8bc22d4f06ca9bb939acfea78ebb038039fce0ce.zip | |
Accept finite negative material RGB coefficients
Diffstat (limited to 'adapters')
| -rw-r--r-- | adapters/fparkan-render-vulkan/src/ffi/smoke.rs | 8 | ||||
| -rw-r--r-- | adapters/fparkan-render-vulkan/src/ffi/smoke_types.rs | 34 |
2 files changed, 28 insertions, 14 deletions
diff --git a/adapters/fparkan-render-vulkan/src/ffi/smoke.rs b/adapters/fparkan-render-vulkan/src/ffi/smoke.rs index c45c331..c9de5ba 100644 --- a/adapters/fparkan-render-vulkan/src/ffi/smoke.rs +++ b/adapters/fparkan-render-vulkan/src/ffi/smoke.rs @@ -1091,10 +1091,10 @@ impl VulkanSmokeRenderer { .chain(additive_rgb) .chain(overlay_directional_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 { - 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( @@ -1155,10 +1155,10 @@ impl VulkanSmokeRenderer { if specular_rgb .into_iter() .chain(overlay_specular_rgb.into_iter().flatten()) - .any(|value| !value.is_finite() || value < 0.0) + .any(|value| !value.is_finite()) { 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( diff --git a/adapters/fparkan-render-vulkan/src/ffi/smoke_types.rs b/adapters/fparkan-render-vulkan/src/ffi/smoke_types.rs index c41eff9..f628e23 100644 --- a/adapters/fparkan-render-vulkan/src/ffi/smoke_types.rs +++ b/adapters/fparkan-render-vulkan/src/ffi/smoke_types.rs @@ -622,9 +622,9 @@ pub(super) fn resolve_draw_texture_indices( .chain(material.additive_rgb) .chain(material.specular_rgb) .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 .uv_transform @@ -645,9 +645,9 @@ pub(super) fn resolve_draw_texture_indices( .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 .overlay_uv_transform @@ -1012,15 +1012,15 @@ mod static_mesh_tests { overlay_detail_texture: None, diffuse_alpha: 1.0, overlay_diffuse_alpha: None, - directional_rgb: [1.0; 3], - additive_rgb: [0.0; 3], - specular_rgb: [0.0; 3], + directional_rgb: [-0.25; 3], + additive_rgb: [-0.5; 3], + specular_rgb: [-0.75; 3], specular_power: 0, - overlay_specular_rgb: None, + overlay_specular_rgb: Some([-1.0; 3]), overlay_specular_power: None, uv_transform: [0.0, 0.0, 1.0, 1.0], - overlay_directional_rgb: None, - overlay_additive_rgb: None, + overlay_directional_rgb: Some([-0.125; 3]), + overlay_additive_rgb: Some([-0.375; 3]), detail_uv_transform: [0.0, 0.0, 1.0, 1.0], overlay_uv_transform: None, overlay_detail_uv_transform: None, @@ -1061,6 +1061,20 @@ mod static_mesh_tests { resolve_draw_texture_indices(&ranges, &materials), 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] |
