[Bf-blender-cvs] [acf8f6220d6] blender-v3.4-release: Sculpt: Fix box face sets not working for multires

Joseph Eagar noreply at git.blender.org
Tue Nov 22 21:31:00 CET 2022


Commit: acf8f6220d648fdd71a68722072ba989d38e5a2b
Author: Joseph Eagar
Date:   Tue Nov 22 12:30:36 2022 -0800
Branches: blender-v3.4-release
https://developer.blender.org/rBacf8f6220d648fdd71a68722072ba989d38e5a2b

Sculpt: Fix box face sets not working for multires

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

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

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

diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h
index d256ca81ec6..7f31179777f 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -710,6 +710,7 @@ typedef struct PBVHFaceIter {
   int prim_index_;
   const struct SubdivCCG *subdiv_ccg_;
   const struct BMesh *bm;
+  CCGKey subdiv_key_;
 
   int last_face_index_;
 } PBVHFaceIter;
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index 9195683f70c..f948749f7bb 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -3738,10 +3738,12 @@ void pbvh_face_iter_step(PBVHFaceIter *fd, bool do_step)
       pbvh_face_iter_verts_reserve(fd, mp->totloop);
 
       const MLoop *ml = fd->mloop_ + mp->loopstart;
+      const int grid_area = fd->subdiv_key_.grid_area;
+
       for (int i = 0; i < mp->totloop; i++, ml++) {
         if (fd->pbvh_type_ == PBVH_GRIDS) {
           /* Grid corners. */
-          fd->verts[i].i = mp->loopstart + i;
+          fd->verts[i].i = (mp->loopstart + i) * grid_area + grid_area - 1;
         }
         else {
           fd->verts[i].i = ml->v;
@@ -3771,6 +3773,8 @@ void BKE_pbvh_face_iter_init(PBVH *pbvh, PBVHNode *node, PBVHFaceIter *fd)
   switch (BKE_pbvh_type(pbvh)) {
     case PBVH_GRIDS:
       fd->subdiv_ccg_ = pbvh->subdiv_ccg;
+      fd->subdiv_key_ = pbvh->gridkey;
+      ATTR_FALLTHROUGH;
     case PBVH_FACES:
       fd->mpoly_ = pbvh->mpoly;
       fd->mloop_ = pbvh->mloop;



More information about the Bf-blender-cvs mailing list