Fix T57878: 2.8 Opening project in Blender Crashes.

Crash was due to some modifier trying to access the editmesh of its
target just after loading, when that editmesh has not yet been
re-created...
This commit is contained in:
Bastien Montagne 2018-11-29 15:48:08 +01:00
parent 3cc0eb36c3
commit 4c2a3b4701
Notes: blender-bot 2023-02-14 08:35:51 +01:00
Referenced by issue #57878, 2.8 Opening project in Blender Crashes
1 changed files with 7 additions and 5 deletions

View File

@ -907,20 +907,22 @@ struct DerivedMesh *modifier_applyModifier_DM_deprecated(
/**
* Get evaluated mesh for other evaluated object, which is used as an operand for the modifier,
* e.g. second operand for boolean modifier.
* Note thqt modifiers in stack always get fully evaluated COW ID pointers, never original ones. Makes things simpler.
* Note that modifiers in stack always get fully evaluated COW ID pointers, never original ones. Makes things simpler.
*/
Mesh *BKE_modifier_get_evaluated_mesh_from_evaluated_object(Object *ob_eval, bool *r_free_mesh)
{
Mesh *me;
Mesh *me = NULL;
if ((ob_eval->type == OB_MESH) && (ob_eval->mode & OB_MODE_EDIT)) {
/* Note: currently we have no equivalent to derived cagemesh or even final dm in BMEditMesh...
* This is TODO in core depsgraph/modifier stack code still. */
BMEditMesh *em = BKE_editmesh_from_object(ob_eval);
me = BKE_mesh_from_bmesh_for_eval_nomain(em->bm, 0);
*r_free_mesh = true;
if (em != NULL) { /* em might not exist yet in some cases, just after loading a .blend file, see T57878. */
me = BKE_mesh_from_bmesh_for_eval_nomain(em->bm, 0);
*r_free_mesh = true;
}
}
else {
if (me == NULL) {
me = ob_eval->runtime.mesh_eval;
*r_free_mesh = false;
}