diff options
author | Hans Goudey <h.goudey@me.com> | 2022-02-23 21:57:04 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2022-02-23 21:57:04 +0300 |
commit | dbef66c32f728546c6b0a1759a38e7edd9fa4dfc (patch) | |
tree | 3911116ea235b52ba5266b7b76752858c81d86da | |
parent | 398538b914a3c7ff3cf845f4fe6b2bdbb47204cb (diff) |
Fix T95952: Uninitialized value used in Bezier Segment node
0fd72a98ac1377a385b6 called functions to set bezier handle positions
that used uninitialized memory. The fix is to define the handle positions
explicitly, like before.
-rw-r--r-- | source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc index 7d84ddf9917..6e1c8a80a00 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc @@ -91,13 +91,22 @@ static std::unique_ptr<CurveEval> create_bezier_segment_curve( positions.first() = start; positions.last() = end; + MutableSpan<float3> handles_right = spline->handle_positions_right(); + MutableSpan<float3> handles_left = spline->handle_positions_left(); + if (mode == GEO_NODE_CURVE_PRIMITIVE_BEZIER_SEGMENT_POSITION) { - spline->set_handle_position_right(0, start_handle_right); - spline->set_handle_position_left(1, end_handle_left); + handles_left.first() = 2.0f * start - start_handle_right; + handles_right.first() = start_handle_right; + + handles_left.last() = end_handle_left; + handles_right.last() = 2.0f * end - end_handle_left; } else { - spline->set_handle_position_right(0, start + start_handle_right); - spline->set_handle_position_left(1, end + end_handle_left); + handles_left.first() = start - start_handle_right; + handles_right.first() = start + start_handle_right; + + handles_left.last() = end + end_handle_left; + handles_right.last() = end - end_handle_left; } curve->add_spline(std::move(spline)); |