[Bf-blender-cvs] [4079136bf4f] sculpt-dev: sculpt-dev: Fix new BMLog for new id system

Joseph Eagar noreply at git.blender.org
Mon Feb 6 11:55:00 CET 2023


Commit: 4079136bf4fe207fa37de73382bf6cbc6428761c
Author: Joseph Eagar
Date:   Mon Feb 6 02:52:36 2023 -0800
Branches: sculpt-dev
https://developer.blender.org/rB4079136bf4fe207fa37de73382bf6cbc6428761c

sculpt-dev: Fix new BMLog for new id system

Everything seems to be working, I can now
start reverting the old ID system (which
was not suitable for master).

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

M	source/blender/bmesh/intern/bmesh_log.cc

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

diff --git a/source/blender/bmesh/intern/bmesh_log.cc b/source/blender/bmesh/intern/bmesh_log.cc
index adc22c599a4..e98aea0080e 100644
--- a/source/blender/bmesh/intern/bmesh_log.cc
+++ b/source/blender/bmesh/intern/bmesh_log.cc
@@ -418,10 +418,9 @@ struct BMLogEntry {
   template<typename T> T *get_elem_from_id(BMesh *bm, BMID<T> id)
   {
 #ifdef USE_NEW_IDMAP
-    BMIdMap *idmap = idmap;
+    return reinterpret_cast<T *>(BM_idmap_lookup(idmap, id.id));
 #else
     auto *idmap = &bm->idmap;
-#endif
 
     if (idmap->flag & BM_NO_REUSE_IDS) {
       return reinterpret_cast<T *>(BLI_ghash_lookup(bm->idmap.ghash, POINTER_FROM_INT(id.id)));
@@ -433,18 +432,19 @@ struct BMLogEntry {
     }
 
     return reinterpret_cast<T *>(idmap->map[id.id]);
+#endif
   }
 
   template<typename T> void assign_elem_id(BMesh *bm, T *elem, BMID<T> _id, bool check_unique)
   {
-    BMElem *bmelem = reinterpret_cast<BMElem *>(elem);
     int id = _id.id;
 
 #ifdef USE_NEW_IDMAP
     if (check_unique) {
       BMElem *old;
+      old = BM_idmap_lookup(idmap, id);
 
-      if ((old = BM_idmap_lookup(idmap, id))) {
+      if (old && old != (BMElem *)elem) {
         printf("id conflict in bm_assign_id; elem %p (a %s) is being reassinged to id %d.\n",
                elem,
                get_elem_htype_str((int)elem->head.htype),
@@ -452,13 +452,14 @@ struct BMLogEntry {
         printf(
             "  elem %p (a %s) will get a new id\n", old, get_elem_htype_str((int)old->head.htype));
 
-        BM_idmap_assign(idmap, elem, id);
+        BM_idmap_assign(idmap, reinterpret_cast<BMElem *>(elem), id);
         return;
       }
     }
 
-    BM_idmap_assign(idmap, elem, id);
+    BM_idmap_assign(idmap, reinterpret_cast<BMElem *>(elem), id);
 #else
+    BMElem *bmelem = reinterpret_cast<BMElem *>(elem);
     bm_assign_id(bm, bmelem, (uint)id, check_unique);
 #endif
   }
@@ -533,7 +534,7 @@ struct BMLogEntry {
       printf("%s: error: wrong length for face, was %d, should be %d\n",
              __func__,
              f->len,
-             lf->verts.size());
+             (int)lf->verts.size());
       return;
     }
 
@@ -711,7 +712,7 @@ struct BMLogEntry {
   ATTR_NO_OPT void undo(BMesh *bm, BMLogCallbacks *callbacks)
   {
     for (int i = sets.size() - 1; i >= 0; i--) {
-      printf("  - %d of %d\n", i, (int)(sets.size() - 1));
+      //printf("  - %d of %d\n", i, (int)(sets.size() - 1));
       sets[i]->undo(bm, callbacks);
     }
   }
@@ -1014,7 +1015,7 @@ void BMLogSetDiff::modify_edge(BMesh *bm, BMEdge *e)
 void BMLogSetDiff::add_face(BMesh *bm, BMFace *f)
 {
 #ifdef USE_NEW_IDMAP
-  BM_idmap_check_assign(log->idmap, (BMElem *)f);
+  BM_idmap_check_assign(entry->idmap, (BMElem *)f);
 #endif
 
   BMID<BMFace> id = entry->get_elem_id<BMFace>(bm, f);
@@ -1153,7 +1154,7 @@ ATTR_NO_OPT void BMLogSetDiff::remove_verts(BMesh *bm,
     }
 
 #ifdef USE_NEW_IDMAP
-    BM_idmap_release(log->idmap, (BMElem *)v, false);
+    BM_idmap_release(entry->idmap, (BMElem *)v, false);
 #endif
     BM_vert_kill(bm, v);
   }
@@ -1208,7 +1209,7 @@ void BMLogSetDiff::remove_edges(BMesh *bm,
     }
 
 #ifdef USE_NEW_IDMAP
-    BM_idmap_release(entry->idmap, reinterpret_cast<BMElem *>(e));
+    BM_idmap_release(entry->idmap, reinterpret_cast<BMElem *>(e), true);
 #endif
     BM_edge_kill(bm, e);
   }
@@ -1314,7 +1315,7 @@ ATTR_NO_OPT void BMLogSetDiff::remove_faces(BMesh *bm,
     }
 
 #ifdef USE_NEW_IDMAP
-    BM_idmap_release(entry->idmap, reinterpret_cast<BMElem *>(f));
+    BM_idmap_release(entry->idmap, reinterpret_cast<BMElem *>(f), true);
 #endif
     BM_face_kill(bm, f);
   }
@@ -1546,7 +1547,7 @@ void BM_log_full_mesh(BMesh *bm, BMLog *log)
 BMVert *BM_log_id_vert_get(BMesh *bm, BMLog *log, uint id)
 {
 #ifdef USE_NEW_IDMAP
-  return BM_idmap_lookup(log->idmap, id);
+  return reinterpret_cast<BMVert *>(BM_idmap_lookup(log->idmap, id));
 #else
   return reinterpret_cast<BMVert *>(BM_ELEM_FROM_ID(bm, id));
 #endif
@@ -1564,7 +1565,7 @@ uint BM_log_vert_id_get(BMesh *bm, BMLog *log, BMVert *v)
 BMFace *BM_log_id_face_get(BMesh *bm, BMLog *log, uint id)
 {
 #ifdef USE_NEW_IDMAP
-  return BM_idmap_lookup(log->idmap, id);
+  return reinterpret_cast<BMFace *>(BM_idmap_lookup(log->idmap, id));
 #else
   return reinterpret_cast<BMFace *>(BM_ELEM_FROM_ID(bm, id));
 #endif



More information about the Bf-blender-cvs mailing list