diff options
author | Sergey Sharybin <sergey@blender.org> | 2022-02-10 17:51:19 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey@blender.org> | 2022-02-10 17:51:19 +0300 |
commit | 94f023023035492da824fb1f4df1067e1e1237f1 (patch) | |
tree | fae0a7b7b487f36cd484e2637d390c3f89ff843f /source/blender/blenkernel/intern/multires_reshape_smooth.c | |
parent | 04d55038ee52fc1155cc0ece916d90fd535c2364 (diff) |
Fix T95666: Crash when attempting multires linear subdivide
The crash was happening when the mesh had loose edges.
Loose edges are not part of OpenSubdiv topology and hence should not be
communicated to the refiner. Pass ta boolean flag indicating whether an
edge is loose or not in the mesh foreach routines, which seems to be
the easiest way.
Diffstat (limited to 'source/blender/blenkernel/intern/multires_reshape_smooth.c')
-rw-r--r-- | source/blender/blenkernel/intern/multires_reshape_smooth.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/multires_reshape_smooth.c b/source/blender/blenkernel/intern/multires_reshape_smooth.c index 839c457dd84..9ecd0901689 100644 --- a/source/blender/blenkernel/intern/multires_reshape_smooth.c +++ b/source/blender/blenkernel/intern/multires_reshape_smooth.c @@ -825,6 +825,7 @@ static void foreach_edge(const struct SubdivForeachContext *foreach_context, void *UNUSED(tls), const int coarse_edge_index, const int UNUSED(subdiv_edge_index), + const bool is_loose, const int subdiv_v1, const int subdiv_v2) { @@ -832,7 +833,9 @@ static void foreach_edge(const struct SubdivForeachContext *foreach_context, const MultiresReshapeContext *reshape_context = reshape_smooth_context->reshape_context; if (reshape_smooth_context->smoothing_type == MULTIRES_SUBDIVIDE_LINEAR) { - store_edge(reshape_smooth_context, subdiv_v1, subdiv_v2, (char)255); + if (!is_loose) { + store_edge(reshape_smooth_context, subdiv_v1, subdiv_v2, (char)255); + } return; } |