diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2020-04-23 19:20:18 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2020-04-24 11:29:26 +0300 |
commit | 4542b50afcfc9b797d5f3048393ba1f1836561a0 (patch) | |
tree | f9ba21556f6f2d71aa5c4dd065edce60640224c7 /source/blender/blenkernel/intern/multires_reshape_util.c | |
parent | 1625b7c37c2655d5405f7e6a8158950761e678fe (diff) |
T75631: New multires shrinkage problem
The old Subdivide button was behaving as if subdivision modifier was
applied on top of the multires. This was the source of shrinkage since
the behavior of the limit surface: limit surface of a sparse point
from another limit surface makes final result appear smaller.
The new behavior is based on propagating delta against base mesh's
limit surface to the top level. Effectively, this is as if we've
sculpted on old top level and then propagated to the new top level.
Differential Revision: https://developer.blender.org/D7505
Diffstat (limited to 'source/blender/blenkernel/intern/multires_reshape_util.c')
-rw-r--r-- | source/blender/blenkernel/intern/multires_reshape_util.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/multires_reshape_util.c b/source/blender/blenkernel/intern/multires_reshape_util.c index 5b6e211cc9b..57d790d2c34 100644 --- a/source/blender/blenkernel/intern/multires_reshape_util.c +++ b/source/blender/blenkernel/intern/multires_reshape_util.c @@ -236,7 +236,7 @@ bool multires_reshape_context_create_from_subdivide(MultiresReshapeContext *resh return context_verify_or_free(reshape_context); } -static void free_original_grids(MultiresReshapeContext *reshape_context) +void multires_reshape_free_original_grids(MultiresReshapeContext *reshape_context) { MDisps *orig_mdisps = reshape_context->orig.mdisps; GridPaintMask *orig_grid_paint_masks = reshape_context->orig.grid_paint_masks; @@ -259,6 +259,9 @@ static void free_original_grids(MultiresReshapeContext *reshape_context) MEM_SAFE_FREE(orig_mdisps); MEM_SAFE_FREE(orig_grid_paint_masks); + + reshape_context->orig.mdisps = NULL; + reshape_context->orig.grid_paint_masks = NULL; } void multires_reshape_context_free(MultiresReshapeContext *reshape_context) @@ -267,7 +270,7 @@ void multires_reshape_context_free(MultiresReshapeContext *reshape_context) BKE_subdiv_free(reshape_context->subdiv); } - free_original_grids(reshape_context); + multires_reshape_free_original_grids(reshape_context); MEM_freeN(reshape_context->face_start_grid_index); MEM_freeN(reshape_context->ptex_start_grid_index); |