Fix T69580: Smooth brush freezes on highpoly mesh

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D5831
This commit is contained in:
Pablo Dobarro 2019-09-17 22:15:58 +02:00
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
3 changed files with 44 additions and 8 deletions

View File

@ -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;
}
}
}

View File

@ -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);
}

View File

@ -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. */