rbx_loader: do not fail zero size meshes & unions

This commit is contained in:
2026-03-04 07:07:29 -08:00
parent c606adaaeb
commit c3b9496e15

View File

@@ -905,24 +905,19 @@ impl PartialMap1<'_>{
deferred_model_deferred_attributes.model.mesh, deferred_model_deferred_attributes.model.mesh,
deferred_model_deferred_attributes.render deferred_model_deferred_attributes.render
)?; )?;
// If the mesh size is zero we can't auto-scale it, throw it out. let mut model=deferred_model_deferred_attributes.model;
if mesh_size.x==integer::Fixed::ZERO||mesh_size.y==integer::Fixed::ZERO||mesh_size.z==integer::Fixed::ZERO{ model.mesh=mesh;
println!("[rbx_loader] Mesh with zero size!"); // avoid devide by zero but introduce more edge cases. not sure what the correct thing to do here is.
return None; if mesh_size.x!=integer::Fixed::ZERO{
model.transform.matrix3.x_axis=(model.transform.matrix3.x_axis*2/mesh_size.x).divide().narrow_1().unwrap();
} }
Some(ModelDeferredAttributes{ if mesh_size.y!=integer::Fixed::ZERO{
mesh, model.transform.matrix3.y_axis=(model.transform.matrix3.y_axis*2/mesh_size.y).divide().narrow_1().unwrap();
deferred_attributes:deferred_model_deferred_attributes.model.deferred_attributes, }
color:deferred_model_deferred_attributes.model.color, if mesh_size.z!=integer::Fixed::ZERO{
transform:Planar64Affine3::new( model.transform.matrix3.z_axis=(model.transform.matrix3.z_axis*2/mesh_size.z).divide().narrow_1().unwrap();
Planar64Mat3::from_cols([ }
(deferred_model_deferred_attributes.model.transform.matrix3.x_axis*2/mesh_size.x).divide().narrow_1().unwrap(), Some(model)
(deferred_model_deferred_attributes.model.transform.matrix3.y_axis*2/mesh_size.y).divide().narrow_1().unwrap(),
(deferred_model_deferred_attributes.model.transform.matrix3.z_axis*2/mesh_size.z).divide().narrow_1().unwrap(),
]),
deferred_model_deferred_attributes.model.transform.translation
),
})
}).chain(self.deferred_unions_deferred_attributes.into_iter().flat_map(|deferred_union_deferred_attributes|{ }).chain(self.deferred_unions_deferred_attributes.into_iter().flat_map(|deferred_union_deferred_attributes|{
//meshes need to be cloned from loaded_meshes with a new id when they are used with a new render_id //meshes need to be cloned from loaded_meshes with a new id when they are used with a new render_id
//insert into primitive_meshes //insert into primitive_meshes
@@ -933,19 +928,19 @@ impl PartialMap1<'_>{
deferred_union_deferred_attributes.model.mesh, deferred_union_deferred_attributes.model.mesh,
deferred_union_deferred_attributes.render deferred_union_deferred_attributes.render
)?; )?;
Some(ModelDeferredAttributes{ let mut model=deferred_union_deferred_attributes.model;
mesh, model.mesh=mesh;
deferred_attributes:deferred_union_deferred_attributes.model.deferred_attributes, // avoid devide by zero but introduce more edge cases. not sure what the correct thing to do here is.
color:deferred_union_deferred_attributes.model.color, if size.x!=integer::Fixed::ZERO{
transform:Planar64Affine3::new( model.transform.matrix3.x_axis=(model.transform.matrix3.x_axis*2/size.x).divide().narrow_1().unwrap();
Planar64Mat3::from_cols([ }
(deferred_union_deferred_attributes.model.transform.matrix3.x_axis*2/size.x).divide().narrow_1().unwrap(), if size.y!=integer::Fixed::ZERO{
(deferred_union_deferred_attributes.model.transform.matrix3.y_axis*2/size.y).divide().narrow_1().unwrap(), model.transform.matrix3.y_axis=(model.transform.matrix3.y_axis*2/size.y).divide().narrow_1().unwrap();
(deferred_union_deferred_attributes.model.transform.matrix3.z_axis*2/size.z).divide().narrow_1().unwrap(), }
]), if size.z!=integer::Fixed::ZERO{
deferred_union_deferred_attributes.model.transform.translation model.transform.matrix3.z_axis=(model.transform.matrix3.z_axis*2/size.z).divide().narrow_1().unwrap();
), }
}) Some(model)
})) }))
.chain(self.primitive_models_deferred_attributes.into_iter()) .chain(self.primitive_models_deferred_attributes.into_iter())
.filter_map(|model_deferred_attributes|{ .filter_map(|model_deferred_attributes|{