Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntony Riakiotakis <kalast@gmail.com>2014-04-16 03:10:24 +0400
committerAntony Riakiotakis <kalast@gmail.com>2014-04-16 03:10:24 +0400
commitb179647d52ae17eb9af243f0307398146ac2744d (patch)
tree967ef1d2714728993e4d199e565a33d51bf4cfab /source/blender
parent9351e872f5317a5690ecdaeaf9dd9db5e1558cfc (diff)
Dyntopo: slightly change node invalidation, only vertices can change BB
recalculation, only faces can change normal invalidation.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/intern/pbvh_bmesh.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/pbvh_bmesh.c b/source/blender/blenkernel/intern/pbvh_bmesh.c
index e625713dcff..80d92f7c3a1 100644
--- a/source/blender/blenkernel/intern/pbvh_bmesh.c
+++ b/source/blender/blenkernel/intern/pbvh_bmesh.c
@@ -289,12 +289,15 @@ static BMVert *pbvh_bmesh_vert_create(PBVH *bvh, int node_index,
{
BMVert *v = BM_vert_create(bvh->bm, co, example, BM_CREATE_NOP);
void *val = SET_INT_IN_POINTER(node_index);
+ PBVHNode *node = &bvh->nodes[node_index];
BLI_assert((bvh->totnode == 1 || node_index) && node_index <= bvh->totnode);
- BLI_gset_insert(bvh->nodes[node_index].bm_unique_verts, v);
+ BLI_gset_insert(node->bm_unique_verts, v);
BLI_ghash_insert(bvh->bm_vert_to_node, v, val);
+ node->flag |= PBVH_UpdateDrawBuffers | PBVH_UpdateBB;
+
/* Log the new vertex */
BM_log_vert_added(bvh->bm_log, v, cd_vert_mask_offset);
@@ -307,6 +310,7 @@ static BMFace *pbvh_bmesh_face_create(PBVH *bvh, int node_index,
{
BMFace *f;
void *val = SET_INT_IN_POINTER(node_index);
+ PBVHNode *node = &bvh->nodes[node_index];
/* ensure we never add existing face */
BLI_assert(BM_face_exists(v_tri, 3, NULL) == false);
@@ -317,12 +321,12 @@ static BMFace *pbvh_bmesh_face_create(PBVH *bvh, int node_index,
BLI_assert(!BLI_ghash_haskey(bvh->bm_face_to_node, f));
{
- BLI_gset_insert(bvh->nodes[node_index].bm_faces, f);
+ BLI_gset_insert(node->bm_faces, f);
BLI_ghash_insert(bvh->bm_face_to_node, f, val);
/* mark node for update */
- bvh->nodes[node_index].flag |= PBVH_UpdateDrawBuffers | PBVH_UpdateNormals | PBVH_UpdateBB;
- bvh->nodes[node_index].flag &= ~PBVH_FullyHidden;
+ node->flag |= PBVH_UpdateDrawBuffers | PBVH_UpdateNormals;
+ node->flag &= ~PBVH_FullyHidden;
/* Log the new face */
BM_log_face_added(bvh->bm_log, f);
@@ -378,7 +382,7 @@ static void pbvh_bmesh_vert_ownership_transfer(PBVH *bvh, PBVHNode *new_owner,
current_owner = pbvh_bmesh_node_lookup(bvh, bvh->bm_vert_to_node, v);
/* mark node for update */
- current_owner->flag |= PBVH_UpdateDrawBuffers | PBVH_UpdateNormals | PBVH_UpdateBB;
+ current_owner->flag |= PBVH_UpdateDrawBuffers | PBVH_UpdateBB;
BLI_assert(current_owner != new_owner);
@@ -394,7 +398,7 @@ static void pbvh_bmesh_vert_ownership_transfer(PBVH *bvh, PBVHNode *new_owner,
BLI_assert(!BLI_gset_haskey(new_owner->bm_other_verts, v));
/* mark node for update */
- new_owner->flag |= PBVH_UpdateDrawBuffers | PBVH_UpdateNormals | PBVH_UpdateBB;
+ new_owner->flag |= PBVH_UpdateDrawBuffers | PBVH_UpdateBB;
}
static void pbvh_bmesh_vert_remove(PBVH *bvh, BMVert *v)
@@ -412,9 +416,9 @@ static void pbvh_bmesh_vert_remove(PBVH *bvh, BMVert *v)
BM_ITER_ELEM (f, &bm_iter, v, BM_FACES_OF_VERT) {
PBVHNode *f_node = pbvh_bmesh_node_lookup(bvh, bvh->bm_face_to_node, f);
+ f_node->flag |= PBVH_UpdateDrawBuffers | PBVH_UpdateBB;
+
/* Remove current ownership */
- /* Should be handled above by vert_to_node removal, leaving just in case - psy-fi */
- //BLI_ghash_remove(f_node->bm_unique_verts, v, NULL, NULL);
BLI_gset_remove(f_node->bm_other_verts, v, NULL);
BLI_assert(!BLI_gset_haskey(f_node->bm_unique_verts, v));
@@ -464,7 +468,7 @@ static void pbvh_bmesh_face_remove(PBVH *bvh, BMFace *f)
BM_log_face_removed(bvh->bm_log, f);
/* mark node for update */
- f_node->flag |= PBVH_UpdateDrawBuffers | PBVH_UpdateNormals | PBVH_UpdateBB;
+ f_node->flag |= PBVH_UpdateDrawBuffers | PBVH_UpdateNormals;
}
static void pbvh_bmesh_edge_loops(BLI_Buffer *buf, BMEdge *e)