[Bf-blender-cvs] [458d8a423a2] master: Speed up finding patch components in new boolean.
Howard Trickey
noreply at git.blender.org
Sat Nov 28 20:30:26 CET 2020
Commit: 458d8a423a2fde63e367c605ad069cc76d34ea2c
Author: Howard Trickey
Date: Sat Nov 28 14:27:10 2020 -0500
Branches: master
https://developer.blender.org/rB458d8a423a2fde63e367c605ad069cc76d34ea2c
Speed up finding patch components in new boolean.
By checking if a cell has already been processed in the finding patch
component code, an enormous speedup happens. This only will be
noticeable if there are lots of patches, and some cells with a
large number of patches.
===================================================================
M source/blender/blenlib/intern/mesh_boolean.cc
===================================================================
diff --git a/source/blender/blenlib/intern/mesh_boolean.cc b/source/blender/blenlib/intern/mesh_boolean.cc
index f1510355160..2db939cd628 100644
--- a/source/blender/blenlib/intern/mesh_boolean.cc
+++ b/source/blender/blenlib/intern/mesh_boolean.cc
@@ -1242,6 +1242,7 @@ static Vector<Vector<int>> find_patch_components(const CellsInfo &cinfo, Patches
return Vector<Vector<int>>();
}
int current_component = 0;
+ Array<bool> cell_processed(cinfo.tot_cell(), false);
Stack<int> stack; /* Patch indices to visit. */
Vector<Vector<int>> ans;
for (int pstart : pinfo.index_range()) {
@@ -1258,6 +1259,10 @@ static Vector<Vector<int>> find_patch_components(const CellsInfo &cinfo, Patches
Patch &patch = pinfo.patch(p);
BLI_assert(patch.component == current_component);
for (int c : {patch.cell_above, patch.cell_below}) {
+ if (cell_processed[c]) {
+ continue;
+ }
+ cell_processed[c] = true;
for (int pn : cinfo.cell(c).patches()) {
Patch &patch_neighbor = pinfo.patch(pn);
if (patch_neighbor.component == NO_INDEX) {
More information about the Bf-blender-cvs
mailing list