diff options
author | Bastien Montagne <bastien@blender.org> | 2020-12-29 16:43:12 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2021-01-06 18:25:39 +0300 |
commit | 6672cbeb236444541037e728759792b1208df0da (patch) | |
tree | 9b5248e4566a601673fcc538e007d2e6f549795a /source/blender/makesrna/intern/rna_object.c | |
parent | a584aef4703aeefe0843f3b8aa2c1e863f825aef (diff) |
Fix T84202: Sculpt lasso mask crash after remesh.
'Caused'/revealed by rBd29a720c45e5: Operators that fully re-create the
mesh would previously rely on `sculpt_update_object` called from update
code to get required sculpt-specific data layers re-added to the new
mesh.
Now instead put all code adding data to orig mesh for sculpt purpose
into a new util function (`BKE_sculpt_ensure_orig_mesh_data`), and call
that function when entering sculpt mode, and from voxel remesher code.
This is contonuing effort to more clearly separate orig data from evaluated
data handling/usage in sculpt code.
TODO: there are likely other code paths that would need to call that
new function?
Reviewers: @sergey, @pablodp606
Subscribers:
Diffstat (limited to 'source/blender/makesrna/intern/rna_object.c')
-rw-r--r-- | source/blender/makesrna/intern/rna_object.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index e8f1c26d17f..faa20e642cf 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -483,6 +483,17 @@ static void rna_Object_dependency_update(Main *bmain, Scene *UNUSED(scene), Poin WM_main_add_notifier(NC_OBJECT | ND_PARENT, ptr->owner_id); } +void rna_Object_data_update(Main *bmain, Scene *scene, PointerRNA *ptr) +{ + Object *object = (Object *)ptr->data; + + if (object->mode == OB_MODE_SCULPT) { + BKE_sculpt_ensure_orig_mesh_data(scene, object); + } + + rna_Object_internal_update_data_dependency(bmain, scene, ptr); +} + static void rna_Object_data_set(PointerRNA *ptr, PointerRNA value, struct ReportList *reports) { Object *ob = (Object *)ptr->data; @@ -2679,7 +2690,7 @@ static void rna_def_object(BlenderRNA *brna) prop, NULL, "rna_Object_data_set", "rna_Object_data_typef", "rna_Object_data_poll"); RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_UNLINK); RNA_def_property_ui_text(prop, "Data", "Object data"); - RNA_def_property_update(prop, 0, "rna_Object_internal_update_data_dependency"); + RNA_def_property_update(prop, 0, "rna_Object_data_update"); prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "type"); |