[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