[Bf-blender-cvs] [25ae5ab2d98] sculpt-dev: Sculpt-dev: fix crash in mask slice

Joseph Eagar noreply at git.blender.org
Mon Apr 18 21:50:53 CEST 2022


Commit: 25ae5ab2d98c7e38f20cc5bfa9a20f2368c516d1
Author: Joseph Eagar
Date:   Mon Apr 18 12:38:01 2022 -0700
Branches: sculpt-dev
https://developer.blender.org/rB25ae5ab2d98c7e38f20cc5bfa9a20f2368c516d1

Sculpt-dev: fix crash in mask slice

===================================================================

M	source/blender/blenkernel/intern/paint.c
M	source/blender/editors/mesh/editmesh_mask_extract.c

===================================================================

diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 4ff999c91ed..9203630e81c 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -1450,7 +1450,20 @@ static void sculptsession_free_pbvh(Object *object)
   }
 
   if (ss->pbvh) {
-    BKE_pbvh_set_cached(object, ss->pbvh);
+    if (ss->needs_pbvh_rebuild) {
+      if (ss->pmap) {
+        BKE_pbvh_pmap_release(ss->pmap);
+        ss->pmap = NULL;
+      }
+
+      BKE_pbvh_cache_remove(ss->pbvh);
+      BKE_pbvh_free(ss->pbvh);
+    }
+    else {
+      BKE_pbvh_set_cached(object, ss->pbvh);
+    }
+
+    ss->needs_pbvh_rebuild = false;
     ss->pbvh = NULL;
   }
 
diff --git a/source/blender/editors/mesh/editmesh_mask_extract.c b/source/blender/editors/mesh/editmesh_mask_extract.c
index fdc1e6a6238..52dc6ac9b52 100644
--- a/source/blender/editors/mesh/editmesh_mask_extract.c
+++ b/source/blender/editors/mesh/editmesh_mask_extract.c
@@ -572,8 +572,9 @@ static int paint_mask_slice_exec(bContext *C, wmOperator *op)
   if (ob->mode == OB_MODE_SCULPT) {
     SculptSession *ss = ob->sculpt;
 
-    /* Assign a new Face Set ID to the new faces created by the slice operation. */
+    BKE_sculptsession_update_attr_refs(ob);
 
+    /* Assign a new Face Set ID to the new faces created by the slice operation. */
     switch (BKE_pbvh_type(ss->pbvh)) {
       case PBVH_GRIDS:
       case PBVH_FACES:
@@ -603,6 +604,8 @@ static int paint_mask_slice_exec(bContext *C, wmOperator *op)
         break;
       }
     }
+
+    ss->needs_pbvh_rebuild = true;
   }
 
   ED_sculpt_undo_geometry_end(ob);



More information about the Bf-blender-cvs mailing list