[Bf-blender-cvs] [273040f84cc] sculpt-dev: Sculpt-dev: fix another pbvh cache crash

Joseph Eagar noreply at git.blender.org
Fri Apr 1 04:11:51 CEST 2022


Commit: 273040f84cc172be8186633ff40dac9f51d07388
Author: Joseph Eagar
Date:   Fri Mar 25 02:47:14 2022 -0700
Branches: sculpt-dev
https://developer.blender.org/rB273040f84cc172be8186633ff40dac9f51d07388

Sculpt-dev: fix another pbvh cache crash

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

M	source/blender/blenkernel/BKE_pbvh.h
M	source/blender/blenkernel/intern/paint.c
M	source/blender/blenkernel/intern/pbvh.c

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

diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h
index c558edbffee..6d942de601a 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -624,7 +624,7 @@ void BKE_pbvh_grids_update(PBVH *pbvh,
                            void **gridfaces,
                            struct DMFlagMat *flagmats,
                            unsigned int **grid_hidden);
-void BKE_pbvh_subdiv_cgg_set(PBVH *pbvh, struct SubdivCCG *subdiv_ccg);
+void BKE_pbvh_subdiv_ccg_set(PBVH *pbvh, struct SubdivCCG *subdiv_ccg);
 void BKE_pbvh_face_sets_set(PBVH *pbvh, int *face_sets);
 
 void BKE_pbvh_face_sets_color_set(PBVH *pbvh, int seed, int color_default);
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 06499374a9c..53cd4fc737e 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -1815,7 +1815,9 @@ static void sculpt_update_object(Depsgraph *depsgraph,
   BLI_assert(pbvh == ss->pbvh);
   UNUSED_VARS_NDEBUG(pbvh);
 
-  BKE_pbvh_subdiv_cgg_set(ss->pbvh, ss->subdiv_ccg);
+  if (ss->subdiv_ccg) {
+    BKE_pbvh_subdiv_ccg_set(ss->pbvh, ss->subdiv_ccg);
+  }
   BKE_pbvh_face_sets_set(ss->pbvh, ss->face_sets);
 
   BKE_pbvh_face_sets_color_set(ss->pbvh, me->face_sets_color_seed, me->face_sets_color_default);
@@ -2554,6 +2556,9 @@ static PBVH *build_pbvh_from_ccg(Object *ob, SubdivCCG *subdiv_ccg, bool respect
                          ob->sculpt->fast_draw,
                          ss->face_areas);
   }
+  else {
+    BKE_pbvh_subdiv_ccg_set(pbvh, subdiv_ccg);
+  }
 
   BKE_pbvh_set_face_areas(pbvh, ss->face_areas);
   BKE_pbvh_set_sculpt_verts(pbvh, ss->mdyntopo_verts);
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index 57252de117d..38e5df37918 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -3734,9 +3734,13 @@ const float (*BKE_pbvh_get_vert_normals(const PBVH *pbvh))[3]
   return pbvh->vert_normals;
 }
 
-void BKE_pbvh_subdiv_cgg_set(PBVH *pbvh, SubdivCCG *subdiv_ccg)
+void BKE_pbvh_subdiv_ccg_set(PBVH *pbvh, SubdivCCG *subdiv_ccg)
 {
   pbvh->subdiv_ccg = subdiv_ccg;
+  pbvh->gridfaces = (void**) subdiv_ccg->grid_faces;
+  pbvh->grid_hidden = subdiv_ccg->grid_hidden;
+  pbvh->grid_flag_mats = subdiv_ccg->grid_flag_mats;
+  pbvh->grids = subdiv_ccg->grids;
 }
 
 void BKE_pbvh_face_sets_set(PBVH *pbvh, int *face_sets)
@@ -5193,3 +5197,4 @@ bool BKE_pbvh_pmap_release(SculptPMap *pmap)
 
   return false;
 }
+



More information about the Bf-blender-cvs mailing list