[Bf-blender-cvs] [29a41ed6c2f] master: Fix T103747: crash when using rotation output of Curve to Points node

Jacques Lucke noreply at git.blender.org
Mon Jan 9 14:32:23 CET 2023


Commit: 29a41ed6c2f86248516c3d983f807000685305ef
Author: Jacques Lucke
Date:   Mon Jan 9 14:31:36 2023 +0100
Branches: master
https://developer.blender.org/rB29a41ed6c2f86248516c3d983f807000685305ef

Fix T103747: crash when using rotation output of Curve to Points node

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

M	source/blender/nodes/NOD_geometry_exec.hh
M	source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc

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

diff --git a/source/blender/nodes/NOD_geometry_exec.hh b/source/blender/nodes/NOD_geometry_exec.hh
index 60f58f4c215..ed0ba4105fd 100644
--- a/source/blender/nodes/NOD_geometry_exec.hh
+++ b/source/blender/nodes/NOD_geometry_exec.hh
@@ -283,9 +283,9 @@ class GeoNodeExecParams {
    * attribute is not needed.
    */
   AutoAnonymousAttributeID get_output_anonymous_attribute_id_if_needed(
-      const StringRef output_identifier)
+      const StringRef output_identifier, const bool force_create = false)
   {
-    if (!this->anonymous_attribute_output_is_required(output_identifier)) {
+    if (!this->anonymous_attribute_output_is_required(output_identifier) && !force_create) {
       return {};
     }
     const GeoNodesLFUserData &user_data = *this->user_data();
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
index 6e443f1efb7..ab7a9bef8db 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
@@ -111,12 +111,13 @@ static void node_geo_exec(GeoNodeExecParams params)
 
   GeometryComponentEditData::remember_deformed_curve_positions_if_necessary(geometry_set);
 
-  AutoAnonymousAttributeID tangent_anonymous_id =
-      params.get_output_anonymous_attribute_id_if_needed("Tangent");
-  AutoAnonymousAttributeID normal_anonymous_id =
-      params.get_output_anonymous_attribute_id_if_needed("Normal");
   AutoAnonymousAttributeID rotation_anonymous_id =
       params.get_output_anonymous_attribute_id_if_needed("Rotation");
+  const bool need_tangent_and_normal = bool(rotation_anonymous_id);
+  AutoAnonymousAttributeID tangent_anonymous_id =
+      params.get_output_anonymous_attribute_id_if_needed("Tangent", need_tangent_and_normal);
+  AutoAnonymousAttributeID normal_anonymous_id =
+      params.get_output_anonymous_attribute_id_if_needed("Normal", need_tangent_and_normal);
 
   geometry::ResampleCurvesOutputAttributeIDs resample_attributes;
   resample_attributes.tangent_id = tangent_anonymous_id.get();



More information about the Bf-blender-cvs mailing list