Fix T48176: Shrinkwrap crashes when multiple objects uses same target
Annoying bug caused by temp nature of looptri layer for CCGDM. Fixed in a similar to CCG loops by using lock when allocating and filling looptri arrays. Real fix would be to make sure this array is allocated on object evaluation using DAG's eval_flag, but that's more involved change which we'll work on later.
This commit is contained in:
parent
86b8c8a042
commit
680b135ec1
Notes:
blender-bot
2023-02-14 07:58:29 +01:00
Referenced by issue #48176, open .blend file will be crash with blender 2.77a
|
@ -3523,8 +3523,6 @@ static void shrinkwrap_get_tarmat(bConstraint *con, bConstraintOb *cob, bConstra
|
|||
|
||||
free_bvhtree_from_mesh(&treeData);
|
||||
|
||||
target->release(target);
|
||||
|
||||
if (fail == true) {
|
||||
/* Don't move the point */
|
||||
zero_v3(co);
|
||||
|
|
|
@ -4365,6 +4365,7 @@ static void ccgDM_recalcLoopTri(DerivedMesh *UNUSED(dm))
|
|||
|
||||
static const MLoopTri *ccgDM_getLoopTriArray(DerivedMesh *dm)
|
||||
{
|
||||
BLI_rw_mutex_lock(&loops_cache_rwlock, THREAD_LOCK_WRITE);
|
||||
if (dm->looptris.array) {
|
||||
BLI_assert(poly_to_tri_count(dm->numPolyData, dm->numLoopData) == dm->looptris.num);
|
||||
}
|
||||
|
@ -4395,6 +4396,7 @@ static const MLoopTri *ccgDM_getLoopTriArray(DerivedMesh *dm)
|
|||
lt->poly = poly_index;
|
||||
}
|
||||
}
|
||||
BLI_rw_mutex_unlock(&loops_cache_rwlock);
|
||||
return dm->looptris.array;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue