[Bf-blender-cvs] [4fc4a7e1f4b] temp_bmesh_multires: Fixed SCULPT_dynamic_topology_sync_layers from last commit.

Joseph Eagar noreply at git.blender.org
Mon Oct 26 06:56:05 CET 2020


Commit: 4fc4a7e1f4b37f6c44e642507115e117b678aefa
Author: Joseph Eagar
Date:   Sun Oct 25 22:55:46 2020 -0700
Branches: temp_bmesh_multires
https://developer.blender.org/rB4fc4a7e1f4b37f6c44e642507115e117b678aefa

Fixed SCULPT_dynamic_topology_sync_layers from last commit.

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

M	source/blender/blenkernel/intern/paint.c
M	source/blender/editors/sculpt_paint/sculpt_dyntopo.c

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

diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 07ac4601bb5..80fe1d659ed 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -1717,6 +1717,7 @@ void BKE_sculpt_update_object_after_eval(Depsgraph *depsgraph, Object *ob_eval)
 
   BLI_assert(me_eval != NULL);
   sculpt_update_object(depsgraph, ob_orig, me_eval, false, false, false);
+  SCULPT_dynamic_topology_sync_layers(ob_orig, me_eval);
 }
 
 void BKE_sculpt_color_layer_create_if_needed(struct Object *object)
@@ -1733,6 +1734,7 @@ void BKE_sculpt_color_layer_create_if_needed(struct Object *object)
   CustomData_add_layer(&orig_me->vdata, CD_PROP_COLOR, CD_DEFAULT, NULL, orig_me->totvert);
   BKE_mesh_update_customdata_pointers(orig_me, true);
   DEG_id_tag_update(&orig_me->id, ID_RECALC_GEOMETRY);
+  SCULPT_dynamic_topology_sync_layers(object, orig_me);
 }
 
 void BKE_sculpt_update_object_for_edit(
@@ -1981,6 +1983,7 @@ static PBVH *build_pbvh_for_dynamic_topology(Object *ob)
                        ob->sculpt->cd_origvcol_offset);
   pbvh_show_mask_set(pbvh, ob->sculpt->show_mask);
   pbvh_show_face_sets_set(pbvh, false);
+
   return pbvh;
 }
 
@@ -2071,7 +2074,9 @@ PBVH *BKE_sculpt_object_pbvh_ensure(Depsgraph *depsgraph, Object *ob)
       }
     }
     else if (BKE_pbvh_type(pbvh) == PBVH_BMESH) {
-      SCULPT_dynamic_topology_sync_layers(ob);
+      Object *object_eval = DEG_get_evaluated_object(depsgraph, ob);
+
+      SCULPT_dynamic_topology_sync_layers(ob, BKE_object_get_original_mesh(ob));
     }
     return pbvh;
   }
diff --git a/source/blender/editors/sculpt_paint/sculpt_dyntopo.c b/source/blender/editors/sculpt_paint/sculpt_dyntopo.c
index b8dc0e0e683..ca5125399e5 100644
--- a/source/blender/editors/sculpt_paint/sculpt_dyntopo.c
+++ b/source/blender/editors/sculpt_paint/sculpt_dyntopo.c
@@ -238,6 +238,8 @@ void SCULPT_dynamic_topology_sync_layers(Object *ob, Mesh *me)
   CustomData *cd1[4] = {&me->vdata, &me->edata, &me->ldata, &me->pdata};
   CustomData *cd2[4] = {&bm->vdata, &bm->edata, &bm->ldata, &bm->pdata};
   int types[4] = {BM_VERT, BM_EDGE, BM_LOOP, BM_FACE};
+  int badmask = CD_MASK_MLOOP | CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MPOLY |
+                CD_MASK_ORIGINDEX | CD_MASK_ORIGSPACE | CD_MASK_MFACE;
 
   for (int i = 0; i < 4; i++) {
     CustomDataLayer **newlayers = NULL;
@@ -252,19 +254,15 @@ void SCULPT_dynamic_topology_sync_layers(Object *ob, Mesh *me)
 
     for (int j = 0; j < data1->totlayer; j++) {
       CustomDataLayer *cl1 = data1->layers + j;
+
+      if ((1 << cl1->type) & badmask) {
+        continue;
+      }
+
       int idx = CustomData_get_named_layer_index(data2, cl1->type, cl1->name);
       if (idx < 0) {
         BLI_array_append(newlayers, cl1);
       }
-      else {
-        idx -= CustomData_get_layer_index(data2, cl1->type);
-
-        int idx2 = i - CustomData_get_layer_index(data1, cl1->type);
-
-        if (idx != idx2) {
-          modified = true;
-        }
-      }
     }
 
     for (int j = 0; j < BLI_array_len(newlayers); j++) {
@@ -277,27 +275,32 @@ void SCULPT_dynamic_topology_sync_layers(Object *ob, Mesh *me)
     };
 
     for (int j = 0; j < data1->totlayer; j++) {
-      CustomDataLayer *cl1 = data1->layers + j;
+      CustomDataLayer *cl = data1->layers + j;
+      CustomDataLayer *cl1 = cl;
+
+      if ((1 << cl1->type) & badmask) {
+        continue;
+      }
 
       if (typemap[cl1->type]) {
         continue;
       }
 
       typemap[cl1->type] = 1;
-      cl1 = CustomData_get_active_layer(data1, cl1->type);
+      cl1 = cl + CustomData_get_active_layer(data1, cl1->type);
 
       int idx = CustomData_get_named_layer_index(data2, cl1->type, cl1->name);
       CustomData_set_layer_active_index(data2, cl1->type, idx);
 
-      cl1 = CustomData_get_render_layer(data1, cl1->type);
+      cl1 = cl + CustomData_get_render_layer(data1, cl1->type);
       idx = CustomData_get_named_layer_index(data2, cl1->type, cl1->name);
       CustomData_set_layer_render_index(data2, cl1->type, idx);
 
-      cl1 = CustomData_get_stencil_layer(data1, cl1->type);
+      cl1 = cl + CustomData_get_stencil_layer(data1, cl1->type);
       idx = CustomData_get_named_layer_index(data2, cl1->type, cl1->name);
       CustomData_set_layer_stencil_index(data2, cl1->type, idx);
 
-      cl1 = CustomData_get_clone_layer(data1, cl1->type);
+      cl1 = cl + CustomData_get_clone_layer(data1, cl1->type);
       idx = CustomData_get_named_layer_index(data2, cl1->type, cl1->name);
       CustomData_set_layer_clone_index(data2, cl1->type, idx);
     }



More information about the Bf-blender-cvs mailing list