Commit: e4851c22b07717ceb353788d690c54caa8b749f5 Author: Joseph Eagar Date: Sat Feb 4 04:29:35 2023 -0800 Branches: sculpt-dev https://developer.blender.org/rBe4851c22b07717ceb353788d690c54caa8b749f5
sculpt-dev: Rewrite BMLog Part one of BMLog C++ rewrite. =================================================================== M source/blender/blenkernel/BKE_paint.h M source/blender/blenkernel/BKE_pbvh.h M source/blender/blenkernel/intern/dyntopo.cc M source/blender/blenkernel/intern/dyntopo_collapse.cc M source/blender/blenkernel/intern/paint.cc M source/blender/blenkernel/intern/pbvh.c M source/blender/blenkernel/intern/pbvh_bmesh.c M source/blender/blenkernel/intern/pbvh_intern.h M source/blender/bmesh/CMakeLists.txt M source/blender/bmesh/intern/bmesh_construct.c M source/blender/bmesh/intern/bmesh_core.c D source/blender/bmesh/intern/bmesh_log.c A source/blender/bmesh/intern/bmesh_log.cc M source/blender/bmesh/intern/bmesh_log.h M source/blender/bmesh/intern/bmesh_log_intern.h M source/blender/editors/sculpt_paint/sculpt.cc M source/blender/editors/sculpt_paint/sculpt_dyntopo.c M source/blender/editors/sculpt_paint/sculpt_face_set.cc M source/blender/editors/sculpt_paint/sculpt_intern.h M source/blender/editors/sculpt_paint/sculpt_ops.c M source/blender/editors/sculpt_paint/sculpt_undo.c =================================================================== diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h index 3cee0640af7..31f466e5223 100644 --- a/source/blender/blenkernel/BKE_paint.h +++ b/source/blender/blenkernel/BKE_paint.h @@ -22,6 +22,8 @@ #include "BKE_attribute.h" #include "BKE_pbvh.h" +#include "bmesh_log.h" + #ifdef __cplusplus extern "C" { #endif @@ -847,7 +849,7 @@ typedef struct SculptSession { bool ignore_uvs; /* Undo/redo log for dynamic topology sculpting */ - struct BMLog *bm_log; + BMLog *bm_log; /* Limit surface/grids. */ struct SubdivCCG *subdiv_ccg; diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h index 6dd175c47a6..c3aafb88da5 100644 --- a/source/blender/blenkernel/BKE_pbvh.h +++ b/source/blender/blenkernel/BKE_pbvh.h @@ -12,6 +12,7 @@ #include "BLI_ghash.h" #include "bmesh.h" +#include "bmesh_log.h" /* For embedding CCGKey in iterator. */ #include "BKE_attribute.h" @@ -93,7 +94,6 @@ typedef struct PBVHTriBuf { //#define WITH_PBVH_CACHE -struct BMLog; struct BMesh; struct BMVert; struct BMEdge; @@ -434,7 +434,7 @@ void BKE_pbvh_build_bmesh(PBVH *pbvh, struct Mesh *me, struct BMesh *bm, bool smooth_shading, - struct BMLog *log, + BMLog *log, struct BMIdMap *idmap, const int cd_vert_node_offset, const int cd_face_node_offset, @@ -462,8 +462,8 @@ void BKE_pbvh_build_pixels(PBVH *pbvh, struct ImageUser *image_user); void BKE_pbvh_free(PBVH *pbvh); -void BKE_pbvh_set_bm_log(PBVH *pbvh, struct BMLog *log); -struct BMLog *BKE_pbvh_get_bm_log(PBVH *pbvh); +void BKE_pbvh_set_bm_log(PBVH *pbvh, BMLog *log); +BMLog *BKE_pbvh_get_bm_log(PBVH *pbvh); /* update MSculptVerts, doesn't take pbvh argument to allow usage if pbvh doesn't currently exist */ diff --git a/source/blender/blenkernel/intern/dyntopo.cc b/source/blender/blenkernel/intern/dyntopo.cc index 5cef8751343..18351f48c79 100644 --- a/source/blender/blenkernel/intern/dyntopo.cc +++ b/source/blender/blenkernel/intern/dyntopo.cc @@ -44,7 +44,7 @@ #include "dyntopo_intern.hh" #include "pbvh_intern.h" -#include <stdio.h> +#include <cstdio> namespace blender::dyntopo { @@ -205,13 +205,13 @@ static void pbvh_kill_vert(PBVH *pbvh, BMVert *v, bool log_vert, bool log_edges) if (log_edges) { if (e) { do { - BM_log_edge_removed(pbvh->bm_log, e); + BM_log_edge_removed(pbvh->header.bm, pbvh->bm_log, e); } while ((e = BM_DISK_EDGE_NEXT(e, v)) != v->e); } } if (log_vert) { - BM_log_vert_removed(pbvh->bm_log, v, -1); + BM_log_vert_removed(pbvh->header.bm, pbvh->bm_log, v); } #ifdef USE_NEW_IDMAP @@ -300,7 +300,7 @@ static BMVert *pbvh_bmesh_vert_create(PBVH *pbvh, node->flag |= PBVH_UpdateDrawBuffers | PBVH_UpdateBB | PBVH_UpdateTris | PBVH_UpdateOtherVerts; /* Log the new vertex */ - BM_log_vert_added(pbvh->bm_log, v, cd_vert_mask_offset); + BM_log_vert_added(pbvh->header.bm, pbvh->bm_log, v); v->head.index = pbvh->header.bm->totvert; // set provisional index return v; @@ -324,7 +324,7 @@ static BMFace *bmesh_face_create_edge_log(PBVH *pbvh, if (!e) { e = BM_edge_create(pbvh->header.bm, v1, v2, nullptr, BM_CREATE_NOP); - BM_log_edge_added(pbvh->bm_log, e); + BM_log_edge_added(pbvh->header.bm, pbvh->bm_log, e); } e_tri2[i] = e; @@ -372,7 +372,7 @@ static BMFace *pbvh_bmesh_face_create(PBVH *pbvh, /* Log the new face */ if (log_face) { - BM_log_face_added(pbvh->bm_log, f); + BM_log_face_added(pbvh->header.bm, pbvh->bm_log, f); } int cd_vert_node = pbvh->cd_vert_node_offset; @@ -687,7 +687,7 @@ void pbvh_bmesh_face_remove( /* Log removed face */ if (log_face) { - BM_log_face_removed(pbvh->bm_log, f); + BM_log_face_removed(pbvh->header.bm, pbvh->bm_log, f); } /* mark node for update */ @@ -1229,7 +1229,7 @@ static void unified_edge_queue_task_cb(void *__restrict userdata, int randval = (seed = dyntopo_thread_rand(seed)) & 255; if (do_smooth && randval > 127) { - PBVHVertRef sv = {.i = (intptr_t)l_iter->v}; + PBVHVertRef sv = {(intptr_t)l_iter->v}; surface_smooth_v_safe(tdata->pbvh, l_iter->v, eq_ctx->surface_smooth_fac * @@ -1289,7 +1289,7 @@ bool check_face_is_tri(PBVH *pbvh, BMFace *f) // BKE_pbvh_bmesh_remove_face(pbvh, f, true); pbvh_bmesh_face_remove(pbvh, f, false, true, true); - BM_log_face_pre(pbvh->bm_log, f); + BM_log_face_removed(pbvh->header.bm, pbvh->bm_log, f); #ifdef USE_NEW_IDMAP BM_idmap_release(pbvh->bm_idmap, (BMElem *)f, true); #endif @@ -1333,8 +1333,8 @@ bool check_face_is_tri(PBVH *pbvh, BMFace *f) } if (f == f2) { - BM_log_face_post(pbvh->bm_log, f); - BM_log_face_removed(pbvh->bm_log, f); + BM_log_face_added(pbvh->header.bm, pbvh->bm_log, f); + BM_log_face_removed_no_check(pbvh->header.bm, pbvh->bm_log, f); f = nullptr; } @@ -1363,7 +1363,7 @@ bool check_face_is_tri(PBVH *pbvh, BMFace *f) BMLoop *l = f2->l_first; do { if (l->e->head.index == -1) { - BM_log_edge_added(pbvh->bm_log, l->e); + BM_log_edge_added(pbvh->header.bm, pbvh->bm_log, l->e); l->e->head.index = 0; } } while ((l = l->next) != f2->l_first); @@ -1372,12 +1372,12 @@ bool check_face_is_tri(PBVH *pbvh, BMFace *f) BKE_pbvh_bmesh_add_face(pbvh, f2, false, true); // BM_log_face_post(pbvh->bm_log, f2); - BM_log_face_added(pbvh->bm_log, f2); + BM_log_face_added(pbvh->header.bm, pbvh->bm_log, f2); } if (f) { BKE_pbvh_bmesh_add_face(pbvh, f, false, true); - BM_log_face_post(pbvh->bm_log, f); + BM_log_face_added(pbvh->header.bm, pbvh->bm_log, f); } if (arena) { @@ -1547,7 +1547,7 @@ bool destroy_nonmanifold_fins(PBVH *pbvh, BMEdge *e_root) BMEdge *e = es[i]; if (!e->l) { - BM_log_edge_removed(pbvh->bm_log, e); + BM_log_edge_removed(pbvh->header.bm, pbvh->bm_log, e); # ifdef USE_NEW_IDMAP BM_idmap_release(pbvh->bm_idmap, (BMElem *)e, true); # endif @@ -1561,7 +1561,7 @@ bool destroy_nonmanifold_fins(PBVH *pbvh, BMEdge *e_root) if (!v->e) { pbvh_bmesh_vert_remove(pbvh, v); - BM_log_vert_removed(pbvh->bm_log, v, pbvh->cd_vert_mask_offset); + BM_log_vert_removed(pbvh->header.bm, pbvh->bm_log, v); # ifdef USE_NEW_IDMAP BM_idmap_release(pbvh->bm_idmap, (BMElem *)v, true); # endif @@ -1829,11 +1829,11 @@ static void unified_edge_queue_create(EdgeQueueContext *eq_ctx, MSculptVert *mv2 = BKE_PBVH_SCULPTVERT(cd_sculpt_vert, e->v2); if (mv1->flag & SCULPTVERT_NEED_VALENCE) { - BKE_pbvh_bmesh_update_valence(pbvh->cd_sculpt_vert, (PBVHVertRef){.i = (intptr_t)e->v1}); + BKE_pbvh_bmesh_update_valence(pbvh->cd_sculpt_vert, {(intptr_t)e->v1}); } if (mv2->flag & SCULPTVERT_NEED_VALENCE) { - BKE_pbvh_bmesh_update_valence(pbvh->cd_sculpt_vert, (PBVHVertRef){.i = (intptr_t)e->v2}); + BKE_pbvh_bmesh_update_valence(pbvh->cd_sculpt_vert, {(intptr_t)e->v2}); } // check_vert_fan_are_tris(pbvh, e->v1); @@ -2005,7 +2005,7 @@ static void edge_queue_create_local(EdgeQueueContext *eq_ctx, MSculptVert *mv = BKE_PBVH_SCULPTVERT(pbvh->cd_sculpt_vert, v); if (mv->flag & SCULPTVERT_NEED_VALENCE) { - BKE_pbvh_bmesh_update_valence(pbvh->cd_sculpt_vert, (PBVHVertRef){.i = (intptr_t)v}); + BKE_pbvh_bmesh_update_valence(pbvh->cd_sculpt_vert, {(intptr_t)v}); } edge_queue_insert_val34_vert(eq_ctx, v); @@ -2209,14 +2209,14 @@ cleanup_valence_3_4(EdgeQueueContext *ectx, MSculptVert *mv = BKE_PBVH_SCULPTVERT(pbvh->cd_sculpt_vert, v); - BKE_pbvh_bmesh_check_valence(pbvh, (PBVHVertRef){.i = (intptr_t)v}); + BKE_pbvh_bmesh_check_valence(pbvh, {(intptr_t)v}); int val = mv->valence; if (val != 4 && val != 3) { continue; } - PBVHVertRef sv = {.i = (intptr_t)v}; + PBVHVertRef sv = {(intptr_t)v}; if (len_squared_v3v3(v->co, center) >= rsqr || !v->e || ectx->mask_cb(sv, ectx->mask_cb_data) < 0.5f) { @@ -2355,7 +2355,7 @@ cleanup_valence_3_4(EdgeQueueContext *ectx, pbvh_bmesh_face_remove(pbvh, f, true, true, true); } else { - BM_log_face_removed(pbvh->bm_log, f); + BM_log_face_removed(pbvh->header.bm, pbvh->bm_log, f); } } @@ -2471,7 +2471,7 @@ cleanup_valence_3_4(EdgeQueueContext *ectx, normal_tri_v3( f2->no, f2->l_first->v->co, f2->l_first->next->v->co, f2->l_first->prev->v->co); - BM_log_face_added(pbvh->bm_log, f2); + BM_log_face_added(pbvh->header.bm, pbvh->bm_log, f2); validate_face(pbvh, pbvh->header.bm, f2, false, false); } @@ -2484,7 +2484,7 @@ cleanup_valence_3_4(EdgeQueueContext *ectx, CustomData_bmesh_swap_data_simple( &pbvh->header.bm->ldata, &f1->l_first->prev->head.data, &ls[2]->head.data); - BM_log_face_added(pbvh->bm_log, f1); + BM_log_face_added(pbvh->header.bm, pbvh->bm_log, f1); } validate_vert(pbvh, pbvh->header.bm, v, false, false); @@ -2605,7 +2605,7 @@ static bool do_cleanup_3_4(EdgeQueueContext *eq_ctx, MSculptVert *mv = BKE_PBVH_SCULPTVERT(pbvh->cd_sculpt_vert, v); if (mv->flag & SCULPTVERT_NEED_VALENCE) { - BKE_pbvh_bmesh_update_valence(pbvh->cd_sculpt_vert, (PBVHVertRef){.i = (intptr_t)v}); + BKE_pbvh_bmesh_update_valence(pbvh->cd_sculpt_vert, {(intptr_t)v}); } if (mv->valence < 5) { @@ -2717,22 +2717,23 @@ extern "C" bool BKE_pbvh_bmesh_update_topology(PBVH *pbvh, safe_smooth = DYNTOPO_SAFE_SMOOTH_FAC; } - EdgeQueueContext eq_ctx = {.pool = nullptr, - .bm = pbvh->header.bm, - .mask_cb = mask_cb, - .mask_cb_data = mask_cb_data, - @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs