[Bf-blender-cvs] [52a5c80313c] blender-v2.93-release: Fix T100191: Crash with the wave modifier using normals in edit-mode

Campbell Barton noreply at git.blender.org
Mon Sep 19 14:54:40 CEST 2022


Commit: 52a5c80313c206eb7c1b31af3079bffdda4b09c6
Author: Campbell Barton
Date:   Fri Aug 12 21:45:21 2022 +1000
Branches: blender-v2.93-release
https://developer.blender.org/rB52a5c80313c206eb7c1b31af3079bffdda4b09c6

Fix T100191: Crash with the wave modifier using normals in edit-mode

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

M	source/blender/modifiers/intern/MOD_wave.c

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

diff --git a/source/blender/modifiers/intern/MOD_wave.c b/source/blender/modifiers/intern/MOD_wave.c
index 863656b85a5..0fe023687c2 100644
--- a/source/blender/modifiers/intern/MOD_wave.c
+++ b/source/blender/modifiers/intern/MOD_wave.c
@@ -340,8 +340,12 @@ static void deformVertsEM(ModifierData *md,
   Mesh *mesh_src = NULL;
 
   if (wmd->flag & MOD_WAVE_NORM) {
+    /* NOTE(@campbellbarton): don't request normals here because `use_normals == false`
+     * because #BKE_mesh_wrapper_ensure_mdata has not run yet.
+     * While this could be supported the argument is documented to be removed,
+     * so pass false here and let the normals be created when requested. */
     mesh_src = MOD_deform_mesh_eval_get(
-        ctx->object, editData, mesh, vertexCos, numVerts, true, false);
+        ctx->object, editData, mesh, vertexCos, numVerts, false, false);
   }
   else if (wmd->texture != NULL || wmd->defgrp_name[0] != '\0') {
     mesh_src = MOD_deform_mesh_eval_get(ctx->object, editData, mesh, NULL, numVerts, false, false);
@@ -355,6 +359,12 @@ static void deformVertsEM(ModifierData *md,
   waveModifier_do(wmd, ctx, ctx->object, mesh_src, vertexCos, numVerts);
 
   if (!ELEM(mesh_src, NULL, mesh)) {
+    /* Important not to free `vertexCos` owned by the caller. */
+    EditMeshData *edit_data = mesh_src->runtime.edit_data;
+    if (edit_data->vertexCos == vertexCos) {
+      edit_data->vertexCos = NULL;
+    }
+
     BKE_id_free(NULL, mesh_src);
   }
 }



More information about the Bf-blender-cvs mailing list