[Bf-blender-cvs] [efbe1ea8c75] temp-geometry-nodes-fields: Cleanup and improve comment

Hans Goudey noreply at git.blender.org
Fri Sep 3 06:06:09 CEST 2021


Commit: efbe1ea8c75e550ff8d2f35a3cee12e2ae392b71
Author: Hans Goudey
Date:   Thu Sep 2 23:05:54 2021 -0500
Branches: temp-geometry-nodes-fields
https://developer.blender.org/rBefbe1ea8c75e550ff8d2f35a3cee12e2ae392b71

Cleanup and improve comment

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

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

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

diff --git a/source/blender/nodes/geometry/nodes/node_geo_input_normal.cc b/source/blender/nodes/geometry/nodes/node_geo_input_normal.cc
index 564337394f8..c5162d49d70 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_input_normal.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_input_normal.cc
@@ -40,7 +40,7 @@ static GVArrayPtr mesh_face_normals(const Mesh &mesh,
     const void *data = CustomData_get_layer(&mesh.pdata, CD_NORMAL);
 
     return std::make_unique<fn::GVArray_For_Span<float3>>(
-        Span<float3>((const float3 *)data, mesh.totpoly));
+        Span<float3>((const float3 *)data, polys.size()));
   }
 
   auto normal_fn = [verts, polys, loops](const int i) -> float3 {
@@ -73,7 +73,8 @@ static GVArrayPtr mesh_vertex_normals(const Mesh &mesh,
   /* If the normals are dirty, they must be recalculated for the output of this node's field
    * source. Ideally vertex normals could be calculated lazily on a const mesh, protected with a
    * mutex. But that's not possible at the moment, so we take ownership of the results. Sadly we
-   * must also create a copy of MVert to use the mesh normals API.
+   * must also create a copy of MVert to use the mesh normals API. This can be improved by adding
+   * mutex-protected lazy calculation of normals on meshes.
    *
    * Use mask.min_array_size() to avoid calculating a final chunk of data if possible. */
   Array<MVert> temp_verts(verts);
@@ -133,7 +134,7 @@ static const GVArray *construct_mesh_normals_gvarray(const MeshComponent &mesh_c
       /* The normals on corners are just the mesh's face normals, so start with the face normal
        * array and copy the face normal for each of its corners. */
       GVArrayPtr face_normals = mesh_face_normals(
-          mesh, verts, polys, loops, IndexRange(mesh.totpoly));
+          mesh, verts, polys, loops, IndexRange(polys.size()]));
 
       /* In this case using the mesh component's generic domain interpolation is fine,
        * since the face normal is just copied to every corner. */



More information about the Bf-blender-cvs mailing list