Fix T38941: Laplacian Deform crashes on OSX
When vgroup was invalid somehow (e.g. empty, as in this case) and bind could not happen, code was dereferencing a NULL pointer...
This commit is contained in:
parent
13290d5a16
commit
dad9600004
Notes:
blender-bot
2023-02-14 13:47:32 +01:00
Referenced by issue #38941, Laplacian Deform crashes on OSX Referenced by issue #30975, Image Layer for Blender
|
@ -755,27 +755,27 @@ static void LaplacianDeformModifier_do(
|
|||
}
|
||||
}
|
||||
else {
|
||||
if (lmd->total_verts > 0 && lmd->total_verts == numVerts) {
|
||||
if (isValidVertexGroup(lmd, ob, dm)) {
|
||||
filevertexCos = MEM_mallocN(sizeof(float[3]) * numVerts, "TempDeformCoordinates");
|
||||
memcpy(filevertexCos, lmd->vertexco, sizeof(float[3]) * numVerts);
|
||||
MEM_SAFE_FREE(lmd->vertexco);
|
||||
lmd->total_verts = 0;
|
||||
initSystem(lmd, ob, dm, filevertexCos, numVerts);
|
||||
sys = lmd->cache_system;
|
||||
MEM_SAFE_FREE(filevertexCos);
|
||||
laplacianDeformPreview(sys, vertexCos);
|
||||
}
|
||||
if (!isValidVertexGroup(lmd, ob, dm)) {
|
||||
modifier_setError(&lmd->modifier, "Vertex group '%s' is not valid", lmd->anchor_grp_name);
|
||||
lmd->flag &= ~MOD_LAPLACIANDEFORM_BIND;
|
||||
}
|
||||
else if (lmd->total_verts > 0 && lmd->total_verts == numVerts) {
|
||||
filevertexCos = MEM_mallocN(sizeof(float[3]) * numVerts, "TempDeformCoordinates");
|
||||
memcpy(filevertexCos, lmd->vertexco, sizeof(float[3]) * numVerts);
|
||||
MEM_SAFE_FREE(lmd->vertexco);
|
||||
lmd->total_verts = 0;
|
||||
initSystem(lmd, ob, dm, filevertexCos, numVerts);
|
||||
sys = lmd->cache_system;
|
||||
MEM_SAFE_FREE(filevertexCos);
|
||||
laplacianDeformPreview(sys, vertexCos);
|
||||
}
|
||||
else {
|
||||
if (isValidVertexGroup(lmd, ob, dm)) {
|
||||
initSystem(lmd, ob, dm, vertexCos, numVerts);
|
||||
sys = lmd->cache_system;
|
||||
laplacianDeformPreview(sys, vertexCos);
|
||||
}
|
||||
initSystem(lmd, ob, dm, vertexCos, numVerts);
|
||||
sys = lmd->cache_system;
|
||||
laplacianDeformPreview(sys, vertexCos);
|
||||
}
|
||||
}
|
||||
if (sys->is_matrix_computed && !sys->has_solution) {
|
||||
if (sys && sys->is_matrix_computed && !sys->has_solution) {
|
||||
modifier_setError(&lmd->modifier, "The system did not find a solution");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue