[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