Fix T69580: Smooth brush freezes on highpoly mesh
Reviewed By: brecht Differential Revision: https://developer.blender.org/D5831
This commit is contained in:
parent
4dbea85a3f
commit
a1318d2415
Notes:
blender-bot
2023-02-14 08:06:35 +01:00
Referenced by issue #69580, Smooth brush freezes on highpoly mesh
|
@ -422,9 +422,22 @@ void multires_force_sculpt_rebuild(Object *ob)
|
|||
{
|
||||
multires_flush_sculpt_updates(ob);
|
||||
|
||||
if (ob && ob->sculpt && ob->sculpt->pbvh != NULL) {
|
||||
BKE_pbvh_free(ob->sculpt->pbvh);
|
||||
ob->sculpt->pbvh = NULL;
|
||||
if (ob && ob->sculpt) {
|
||||
SculptSession *ss = ob->sculpt;
|
||||
if (ss->pbvh) {
|
||||
BKE_pbvh_free(ss->pbvh);
|
||||
ob->sculpt->pbvh = NULL;
|
||||
}
|
||||
|
||||
if (ss->pmap) {
|
||||
MEM_freeN(ss->pmap);
|
||||
ss->pmap = NULL;
|
||||
}
|
||||
|
||||
if (ss->pmap_mem) {
|
||||
MEM_freeN(ss->pmap_mem);
|
||||
ss->pmap_mem = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -992,10 +992,24 @@ static void sculptsession_free_pbvh(Object *object)
|
|||
{
|
||||
SculptSession *ss = object->sculpt;
|
||||
|
||||
if (ss && ss->pbvh) {
|
||||
if (!ss) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (ss->pbvh) {
|
||||
BKE_pbvh_free(ss->pbvh);
|
||||
ss->pbvh = NULL;
|
||||
}
|
||||
|
||||
if (ss->pmap) {
|
||||
MEM_freeN(ss->pmap);
|
||||
ss->pmap = NULL;
|
||||
}
|
||||
|
||||
if (ss->pmap_mem) {
|
||||
MEM_freeN(ss->pmap_mem);
|
||||
ss->pmap_mem = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void BKE_sculptsession_bm_to_me_for_render(Object *object)
|
||||
|
@ -1210,9 +1224,7 @@ static void sculpt_update_object(
|
|||
BLI_assert(pbvh == ss->pbvh);
|
||||
UNUSED_VARS_NDEBUG(pbvh);
|
||||
|
||||
MEM_SAFE_FREE(ss->pmap);
|
||||
MEM_SAFE_FREE(ss->pmap_mem);
|
||||
if (need_pmap && ob->type == OB_MESH) {
|
||||
if (need_pmap && ob->type == OB_MESH && !ss->pmap) {
|
||||
BKE_mesh_vert_poly_map_create(
|
||||
&ss->pmap, &ss->pmap_mem, me->mpoly, me->mloop, me->totvert, me->totpoly, me->totloop);
|
||||
}
|
||||
|
|
|
@ -6969,8 +6969,19 @@ void sculpt_pbvh_clear(Object *ob)
|
|||
/* Clear out any existing DM and PBVH */
|
||||
if (ss->pbvh) {
|
||||
BKE_pbvh_free(ss->pbvh);
|
||||
ss->pbvh = NULL;
|
||||
}
|
||||
ss->pbvh = NULL;
|
||||
|
||||
if (ss->pmap) {
|
||||
MEM_freeN(ss->pmap);
|
||||
ss->pmap = NULL;
|
||||
}
|
||||
|
||||
if (ss->pmap_mem) {
|
||||
MEM_freeN(ss->pmap_mem);
|
||||
ss->pmap_mem = NULL;
|
||||
}
|
||||
|
||||
BKE_object_free_derived_caches(ob);
|
||||
|
||||
/* Tag to rebuild PBVH in depsgraph. */
|
||||
|
|
Loading…
Reference in New Issue