Cleanup: Avoid keeping mesh normals references after dirty tag

Without assumptions of a mesh's direct ownership of its normals,
this was error prone, since normals could potentially be reallocated
when they are tagged dirty or retrieved with write access.
This commit is contained in:
Hans Goudey
2023-03-15 21:38:38 -04:00
parent 896360de1f
commit bad85fe8c7

View File

@@ -213,7 +213,6 @@ static void normalEditModifier_do_radial(NormalEditModifierData *enmd,
Mesh *mesh,
short (*clnors)[2],
blender::MutableSpan<blender::float3> loop_normals,
blender::Span<blender::float3> poly_normals,
const short mix_mode,
const float mix_factor,
const float mix_limit,
@@ -324,7 +323,7 @@ static void normalEditModifier_do_radial(NormalEditModifierData *enmd,
polys,
loops,
mesh->vert_normals(),
poly_normals,
mesh->poly_normals(),
sharp_faces,
sharp_edges,
nos,
@@ -340,7 +339,6 @@ static void normalEditModifier_do_directional(NormalEditModifierData *enmd,
Mesh *mesh,
short (*clnors)[2],
blender::MutableSpan<blender::float3> loop_normals,
const blender::Span<blender::float3> poly_normals,
const short mix_mode,
const float mix_factor,
const float mix_limit,
@@ -430,7 +428,7 @@ static void normalEditModifier_do_directional(NormalEditModifierData *enmd,
polys,
loops,
mesh->vert_normals(),
poly_normals,
mesh->poly_normals(),
sharp_faces,
sharp_edges,
nos,
@@ -512,9 +510,6 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd,
CustomData *ldata = &result->ldata;
const blender::Span<blender::float3> vert_normals = result->vert_normals();
const blender::Span<blender::float3> poly_normals = result->poly_normals();
bke::MutableAttributeAccessor attributes = result->attributes_for_write();
bke::SpanAttributeWriter<bool> sharp_edges = attributes.lookup_or_add_for_write_span<bool>(
"sharp_edge", ATTR_DOMAIN_EDGE);
@@ -532,8 +527,8 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd,
polys,
loops,
{},
vert_normals,
poly_normals,
result->vert_normals(),
result->poly_normals(),
sharp_edges.span.data(),
sharp_faces,
true,
@@ -557,7 +552,6 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd,
result,
clnors,
loop_normals,
poly_normals,
enmd->mix_mode,
enmd->mix_factor,
enmd->mix_limit,
@@ -577,7 +571,6 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd,
result,
clnors,
loop_normals,
poly_normals,
enmd->mix_mode,
enmd->mix_factor,
enmd->mix_limit,