Fix SoftBody memory corruption when using invalid mesh
In case of failure the new soft body wasn't created but the previous one wasn't destroyed, causing discrepancies with visual server updates.
This commit is contained in:
parent
ff132ca278
commit
63f6d91a1a
1 changed files with 5 additions and 7 deletions
|
@ -117,19 +117,17 @@ void SoftBodyBullet::update_visual_server(SoftBodyVisualServerHandler *p_visual_
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoftBodyBullet::set_soft_mesh(const Ref<Mesh> &p_mesh) {
|
void SoftBodyBullet::set_soft_mesh(const Ref<Mesh> &p_mesh) {
|
||||||
if (p_mesh.is_null()) {
|
destroy_soft_body();
|
||||||
soft_mesh.unref();
|
|
||||||
} else {
|
soft_mesh = p_mesh;
|
||||||
soft_mesh = p_mesh;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (soft_mesh.is_null()) {
|
if (soft_mesh.is_null()) {
|
||||||
destroy_soft_body();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Array arrays = soft_mesh->surface_get_arrays(0);
|
|
||||||
ERR_FAIL_COND(!(soft_mesh->surface_get_format(0) & VS::ARRAY_FORMAT_INDEX));
|
ERR_FAIL_COND(!(soft_mesh->surface_get_format(0) & VS::ARRAY_FORMAT_INDEX));
|
||||||
|
|
||||||
|
Array arrays = soft_mesh->surface_get_arrays(0);
|
||||||
set_trimesh_body_shape(arrays[VS::ARRAY_INDEX], arrays[VS::ARRAY_VERTEX]);
|
set_trimesh_body_shape(arrays[VS::ARRAY_INDEX], arrays[VS::ARRAY_VERTEX]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue