[Bf-blender-cvs] [66bd1280483] temp-geometry-nodes-distribute-points-cleanup: Fix memleak on tiling

Dalai Felinto noreply at git.blender.org
Fri Dec 11 16:38:33 CET 2020


Commit: 66bd128048339a39a9fa461d6ea266c59641e6f8
Author: Dalai Felinto
Date:   Fri Dec 11 16:28:25 2020 +0100
Branches: temp-geometry-nodes-distribute-points-cleanup
https://developer.blender.org/rB66bd128048339a39a9fa461d6ea266c59641e6f8

Fix memleak on tiling

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

M	source/blender/nodes/geometry/nodes/node_geo_point_distribute_poisson_disk.cc

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

diff --git a/source/blender/nodes/geometry/nodes/node_geo_point_distribute_poisson_disk.cc b/source/blender/nodes/geometry/nodes/node_geo_point_distribute_poisson_disk.cc
index 3e4a8a751f1..ef7a32a3b70 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_point_distribute_poisson_disk.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_point_distribute_poisson_disk.cc
@@ -161,7 +161,7 @@ static float weight_limit_fraction_get(const size_t input_size, const size_t out
  * Tile the input points.
  */
 static void points_tiling(Vector<float3> const *input_points,
-                          const void *kd_tree,
+                          void **kd_tree,
                           const float maximum_distance,
                           const float3 boundbox)
 
@@ -173,9 +173,9 @@ static void points_tiling(Vector<float3> const *input_points,
   /* Start building a kdtree for the samples. */
   for (size_t i = 0; i < input_points->size(); i++) {
     indices[i] = i;
-    BLI_kdtree_3d_insert((KDTree_3d *)kd_tree, i, input_points->data()[i]);
+    BLI_kdtree_3d_insert(*(KDTree_3d **)kd_tree, i, input_points->data()[i]);
   }
-  BLI_kdtree_3d_balance((KDTree_3d *)kd_tree);
+  BLI_kdtree_3d_balance(*(KDTree_3d **)kd_tree);
 
   /* Tile the tree based on the boundbox. */
   for (size_t i = 0; i < input_points->size(); i++) {
@@ -183,14 +183,14 @@ static void points_tiling(Vector<float3> const *input_points,
   }
 
   /* Re-use the same kdtree, so free it before re-creating it. */
-  BLI_kdtree_3d_free((KDTree_3d *)kd_tree);
+  BLI_kdtree_3d_free(*(KDTree_3d **)kd_tree);
 
   /* Build a new tree with the new indices and tiled points. */
-  kd_tree = BLI_kdtree_3d_new(tiled_points.size());
+  *kd_tree = BLI_kdtree_3d_new(tiled_points.size());
   for (size_t i = 0; i < tiled_points.size(); i++) {
-    BLI_kdtree_3d_insert((KDTree_3d *)kd_tree, indices[i], tiled_points[i]);
+    BLI_kdtree_3d_insert(*(KDTree_3d **)kd_tree, indices[i], tiled_points[i]);
   }
-  BLI_kdtree_3d_balance((KDTree_3d *)kd_tree);
+  BLI_kdtree_3d_balance(*(KDTree_3d **)kd_tree);
 }
 
 static void weighted_sample_elimination(Vector<float3> const *input_points,
@@ -204,7 +204,7 @@ static void weighted_sample_elimination(Vector<float3> const *input_points,
                                                            output_points->size());
 
   void *kd_tree = BLI_kdtree_3d_new(input_points->size());
-  points_tiling(input_points, kd_tree, maximum_distance, boundbox);
+  points_tiling(input_points, &kd_tree, maximum_distance, boundbox);
 
   /* Assign weights to each sample. */
   std::vector<float> weights(input_points->size(), 0.0f);



More information about the Bf-blender-cvs mailing list