Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey@blender.org>2022-02-10 17:51:19 +0300
committerSergey Sharybin <sergey@blender.org>2022-02-10 17:51:19 +0300
commit94f023023035492da824fb1f4df1067e1e1237f1 (patch)
treefae0a7b7b487f36cd484e2637d390c3f89ff843f /source/blender/blenkernel/intern/multires_reshape_smooth.c
parent04d55038ee52fc1155cc0ece916d90fd535c2364 (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.c5
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;
}