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:
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
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue