[Bf-blender-cvs] [018d6b8bfe5] temp-geometry-nodes-extrude-mesh: Implement face attribute transfer in edge mode
Hans Goudey
noreply at git.blender.org
Tue Jan 4 22:36:26 CET 2022
Commit: 018d6b8bfe51dc137c7f28f7d4e409714d3d716d
Author: Hans Goudey
Date: Tue Jan 4 15:36:19 2022 -0600
Branches: temp-geometry-nodes-extrude-mesh
https://developer.blender.org/rB018d6b8bfe51dc137c7f28f7d4e409714d3d716d
Implement face attribute transfer in edge mode
===================================================================
M source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
===================================================================
diff --git a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
index e637dae33b7..f5f10ec6a8d 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
@@ -466,7 +466,22 @@ static void extrude_mesh_edges(MeshComponent &component,
}
case ATTR_DOMAIN_FACE: {
MutableSpan<T> new_data = data.slice(new_poly_range);
- new_data.fill(T());
+ threading::parallel_for(edge_selection.index_range(), 512, [&](const IndexRange range) {
+ for (const int i : range) {
+ /* Create a separate mixer for every point to avoid allocating temporary buffers
+ * in the mixer the size of the result point cloud and to allow multi-threading. */
+ attribute_math::DefaultMixer<T> mixer{new_data.slice(i, 1)};
+
+ const int i_src_edge = edge_selection[i];
+ Span<int> connected_polys = edge_to_poly_map[i_src_edge];
+
+ for (const int i_connected_poly : connected_polys) {
+ mixer.mix_in(0, data[i_connected_poly]);
+ }
+
+ mixer.finalize();
+ }
+ });
break;
}
case ATTR_DOMAIN_CORNER: {
More information about the Bf-blender-cvs
mailing list