[Bf-blender-cvs] [c88701178b7] sculpt-dev: Sculpt-dev: fix missing NULL assignment

Joseph Eagar noreply at git.blender.org
Sun Nov 14 01:17:32 CET 2021


Commit: c88701178b7543d957427dd997be8eaebdcf4cc2
Author: Joseph Eagar
Date:   Sat Nov 13 16:17:16 2021 -0800
Branches: sculpt-dev
https://developer.blender.org/rBc88701178b7543d957427dd997be8eaebdcf4cc2

Sculpt-dev: fix missing NULL assignment

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

M	source/blender/blenkernel/BKE_pbvh.h
M	source/blender/blenkernel/intern/pbvh.c
M	source/blender/blenkernel/intern/pbvh_bmesh.c
M	source/blender/bmesh/intern/bmesh_construct.c
M	source/blender/draw/intern/draw_manager_data.c

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

diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h
index e855016ae28..3ae8743de95 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -431,7 +431,7 @@ void BKE_pbvh_draw_cb(PBVH *pbvh,
 
 void BKE_pbvh_draw_debug_cb(
     PBVH *pbvh,
-    void (*draw_fn)(void *user_data, const float bmin[3], const float bmax[3], PBVHNodeFlags flag),
+    void (*draw_fn)(void *user_data, const float bmin[3], const float bmax[3], PBVHNodeFlags flag, int depth),
     void *user_data);
 
 /* PBVH Access */
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index 7c7526e8227..6fea5a0967e 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -3312,7 +3312,7 @@ extern bool pbvh_show_orig_co;
 
 void BKE_pbvh_draw_debug_cb(
     PBVH *pbvh,
-    void (*draw_fn)(void *user_data, const float bmin[3], const float bmax[3], PBVHNodeFlags flag),
+    void (*draw_fn)(void *user_data, const float bmin[3], const float bmax[3], PBVHNodeFlags flag, int depth),
     void *user_data)
 {
   for (int a = 0; a < pbvh->totnode; a++) {
@@ -3321,10 +3321,10 @@ void BKE_pbvh_draw_debug_cb(
     int num = a + node->updategen;
 
     if (pbvh_show_orig_co) {
-      draw_fn(&num, node->orig_vb.bmin, node->orig_vb.bmax, node->flag);
+      draw_fn(&num, node->orig_vb.bmin, node->orig_vb.bmax, node->flag, node->depth);
     }
     else {
-      draw_fn(&num, node->vb.bmin, node->vb.bmax, node->flag);
+      draw_fn(&num, node->vb.bmin, node->vb.bmax, node->flag, node->depth);
     }
   }
 }
diff --git a/source/blender/blenkernel/intern/pbvh_bmesh.c b/source/blender/blenkernel/intern/pbvh_bmesh.c
index ceeda40c931..9137c5fb03d 100644
--- a/source/blender/blenkernel/intern/pbvh_bmesh.c
+++ b/source/blender/blenkernel/intern/pbvh_bmesh.c
@@ -339,6 +339,14 @@ static void pbvh_print_mem_size(PBVH *pbvh)
          memsize2[1],
          memsize2[2],
          memsize2[3]);
+
+#ifdef WITH_BM_ID_FREELIST
+  if (bm->idmap.free_idx_map) {
+    printf("free_idx_map: nentries %d, size %d\n",
+           bm->idmap.free_idx_map->nentries,
+           bm->idmap.free_idx_map->nbuckets);
+  }
+#endif
 }
 
 /* Recursively split the node if it exceeds the leaf_limit */
@@ -394,6 +402,7 @@ static void pbvh_bmesh_node_split(
 
   c1->flag |= PBVH_Leaf;
   c2->flag |= PBVH_Leaf;
+
   c1->bm_faces = BLI_table_gset_new_ex("bm_faces", BLI_table_gset_len(n->bm_faces) / 2);
   c2->bm_faces = BLI_table_gset_new_ex("bm_faces", BLI_table_gset_len(n->bm_faces) / 2);
 
@@ -1581,8 +1590,8 @@ static void pbvh_bmesh_create_nodes_fast_recursive_create(PBVH *pbvh,
     n->children_offset = children_offset;
 
     n->depth = node->depth;
-    (n + 1)->depth = node->depth + 1;
-    (n + 2)->depth = node->depth + 1;
+    (n + 1)->depth = node->child1->depth;
+    (n + 2)->depth = node->child2->depth;
 
     node->child1->node_index = children_offset;
     node->child2->node_index = children_offset + 1;
@@ -3846,6 +3855,8 @@ void BKE_pbvh_bmesh_after_stroke(PBVH *pbvh, bool force_balance)
       }
     }
   }
+
+  pbvh_print_mem_size(pbvh);
 }
 
 void BKE_pbvh_bmesh_detail_size_set(PBVH *pbvh, float detail_size, float detail_range)
diff --git a/source/blender/bmesh/intern/bmesh_construct.c b/source/blender/bmesh/intern/bmesh_construct.c
index c2e67308c03..1d974e267f2 100644
--- a/source/blender/bmesh/intern/bmesh_construct.c
+++ b/source/blender/bmesh/intern/bmesh_construct.c
@@ -54,7 +54,7 @@
 static void bm_id_freelist_check_hashmap(BMesh *bm)
 {
   if (!bm->idmap.free_idx_map && bm->idmap.freelist_len >= FREELIST_HASHMAP_THRESHOLD_HIGH) {
-    printf("switching on freelist idx map");
+    printf("switching on freelist idx map\n");
     bm->idmap.free_idx_map = MEM_callocN(sizeof(SmallHash), "free_idx_map");
     BLI_smallhash_init_ex(bm->idmap.free_idx_map, bm->idmap.freelist_len);
 
@@ -66,8 +66,9 @@ static void bm_id_freelist_check_hashmap(BMesh *bm)
   else if (bm->idmap.free_idx_map && bm->idmap.freelist_len <= FREELIST_HASHMAP_THRESHOLD_LOW) {
     BLI_smallhash_release(bm->idmap.free_idx_map);
     MEM_freeN(bm->idmap.free_idx_map);
+    bm->idmap.free_idx_map = NULL;
 
-    printf("switching off freelist idx map");
+    printf("switching off freelist idx map\n");
   }
 }
 
@@ -126,6 +127,8 @@ void bm_id_freelist_take(BMesh *bm, uint id)
       bm->idmap.freelist[i] = bm->idmap.freelist[bm->idmap.freelist_len - 1];
       bm->idmap.freelist_len--;
     }
+
+    BLI_smallhash_remove(bm->idmap.free_idx_map, (uintptr_t)id);
   }
   else {
     for (int i = 0; i < bm->idmap.freelist_len; i++) {
@@ -273,7 +276,7 @@ void bm_free_id(BMesh *bm, BMElem *elem)
     range_tree_uint_release(bm->idmap.idtree, id);
   }
 #else
-
+  bm_id_freelist_push(bm, id);
 #endif
 
   if ((bm->idmap.flag & BM_HAS_ID_MAP)) {
diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c
index 41039e84d59..196b9cf0c3d 100644
--- a/source/blender/draw/intern/draw_manager_data.c
+++ b/source/blender/draw/intern/draw_manager_data.c
@@ -966,8 +966,7 @@ static void sculpt_draw_cb(DRWSculptCallbackData *scd, GPU_PBVH_Buffers *buffers
     if (SCULPT_DEBUG_BUFFERS) {
       /* Color each buffers in different colors. Only work in solid/Xray mode. */
       shgrp = DRW_shgroup_create_sub(shgrp);
-      DRW_shgroup_uniform_vec3(
-          shgrp, "materialDiffuseColor", SCULPT_DEBUG_COLOR(scd->debug_node_nr++), 1);
+      DRW_shgroup_uniform_vec3(shgrp, "materialDiffuseColor", SCULPT_DEBUG_COLOR(scd->debug_node_nr++), 1);
     }
 #if 0
     float extramat[4][4], mat[4][4];
@@ -989,10 +988,8 @@ static void sculpt_draw_cb(DRWSculptCallbackData *scd, GPU_PBVH_Buffers *buffers
   }
 }
 
-static void sculpt_debug_cb(void *user_data,
-                            const float bmin[3],
-                            const float bmax[3],
-                            PBVHNodeFlags flag)
+static void sculpt_debug_cb(
+    void *user_data, const float bmin[3], const float bmax[3], PBVHNodeFlags flag, int depth)
 {
   int *debug_node_nr = (int *)user_data;
   BoundBox bb;
@@ -1007,7 +1004,12 @@ static void sculpt_debug_cb(void *user_data,
   }
 #else /* Color coded leaf bounds. */
   if (flag & PBVH_Leaf) {
-    DRW_debug_bbox(&bb, SCULPT_DEBUG_COLOR((*debug_node_nr)++));
+    float color[4];
+
+    copy_v4_v4(color, SCULPT_DEBUG_COLOR((*debug_node_nr)++));
+    mul_v3_fl(color, 1.0f - fminf((float)depth / 16.0f, 1.0f));
+
+    DRW_debug_bbox(&bb, color);
   }
 #endif
 }
@@ -1100,8 +1102,8 @@ static void drw_sculpt_generate_calls(DRWSculptCallbackData *scd)
     DRW_debug_modelmat(scd->ob->obmat);
     BKE_pbvh_draw_debug_cb(
         pbvh,
-        (void (*)(
-            void *d, const float min[3], const float max[3], PBVHNodeFlags f))sculpt_debug_cb,
+        (void (*)(void *d, const float min[3], const float max[3], PBVHNodeFlags f, int depth))
+            sculpt_debug_cb,
         &debug_node_nr);
   }
 }



More information about the Bf-blender-cvs mailing list