Commit: d2f4fb68f5d1747d1827dedbd4d2cf9e97379c6a Author: Erik Date: Sat Nov 27 18:17:58 2021 +0100 Branches: master https://developer.blender.org/rBd2f4fb68f5d1747d1827dedbd4d2cf9e97379c6a
Geometry Nodes: Parallelize "Set Spline Type"-node Parallelizes the loop that converts splines. It gives around a 2x speedup on curves with over 1k splines. Differential Revision: https://developer.blender.org/D13389 =================================================================== M release/scripts/addons M release/scripts/addons_contrib M source/blender/nodes/geometry/nodes/node_geo_curve_spline_type.cc =================================================================== diff --git a/release/scripts/addons b/release/scripts/addons index 4de1bcce5a2..9030e2c6d1a 160000 --- a/release/scripts/addons +++ b/release/scripts/addons @@ -1 +1 @@ -Subproject commit 4de1bcce5a2caa31131c40cc19f0a1851c2eb635 +Subproject commit 9030e2c6d1aca714c7122aa5b52bf2424ee4b880 diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib index 16467648282..7936dde9ece 160000 --- a/release/scripts/addons_contrib +++ b/release/scripts/addons_contrib @@ -1 +1 @@ -Subproject commit 16467648282500cc229c271f62201ef897f2c2c3 +Subproject commit 7936dde9ece881d531b1a2ee6c45ddb56d30038c diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_spline_type.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_spline_type.cc index 1d859c8555f..0d4b9e9bdec 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_spline_type.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_spline_type.cc @@ -261,24 +261,28 @@ static void node_geo_exec(GeoNodeExecParams params) const VArray<bool> &selection = selection_evaluator.get_evaluated<bool>(0); std::unique_ptr<CurveEval> new_curve = std::make_unique<CurveEval>(); - for (const int i : curve.splines().index_range()) { - if (selection[i]) { - switch (output_type) { - case GEO_NODE_SPLINE_TYPE_POLY: - new_curve->add_spline(convert_to_poly_spline(*curve.splines()[i])); - break; - case GEO_NODE_SPLINE_TYPE_BEZIER: - new_curve->add_spline(convert_to_bezier(*curve.splines()[i], params)); - break; - case GEO_NODE_SPLINE_TYPE_NURBS: - new_curve->add_spline(convert_to_nurbs(*curve.splines()[i])); - break; + new_curve->resize(curve.splines().size()); + + threading::parallel_for(curve.splines().index_range(), 512, [&](IndexRange range) { + for (const int i : range) { + if (selection[i]) { + switch (output_type) { + case GEO_NODE_SPLINE_TYPE_POLY: + new_curve->splines()[i] = convert_to_poly_spline(*curve.splines()[i]); + break; + case GEO_NODE_SPLINE_TYPE_BEZIER: + new_curve->splines()[i] = convert_to_bezier(*curve.splines()[i], params); + break; + case GEO_NODE_SPLINE_TYPE_NURBS: + new_curve->splines()[i] = convert_to_nurbs(*curve.splines()[i]); + break; + } + } + else { + new_curve->splines()[i] = curve.splines()[i]->copy(); } } - else { - new_curve->add_spline(curve.splines()[i]->copy()); - } - } + }); new_curve->attributes = curve.attributes; geometry_set.replace_curve(new_curve.release()); }); _______________________________________________ Bf-blender-cvs mailing list [email protected] List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
