diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-09-17 18:24:44 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-09-17 20:20:08 +0300 |
commit | 3009429c9045f70a199d6568a79b2dcbad78d095 (patch) | |
tree | 54adf1982b36ee7d7fdb4c6b3f786d76972c5bbc /source/blender/editors | |
parent | 884a3852873f392c1678a1142005da69d0e4cb32 (diff) |
Fix T69809, T69810: sculpt gone or crashing after render
Make a distinction between flush sculpt changes for rendering, and forcing
sculpt data structures to be rebuilt after mesh changes. Also don't use PBVH
for renders.
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/object/object_bake.c | 4 | ||||
-rw-r--r-- | source/blender/editors/object/object_modifier.c | 2 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/sculpt.c | 8 | ||||
-rw-r--r-- | source/blender/editors/util/ed_util.c | 2 |
4 files changed, 7 insertions, 9 deletions
diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c index 70a9870e6ae..bc79521ee9b 100644 --- a/source/blender/editors/object/object_bake.c +++ b/source/blender/editors/object/object_bake.c @@ -371,7 +371,7 @@ static int multiresbake_image_exec_locked(bContext *C, wmOperator *op) ob = base->object; - multires_force_update(ob); + multires_flush_sculpt_updates(ob); /* copy data stored in job descriptor */ bkr.scene = scene; @@ -435,7 +435,7 @@ static void init_multiresbake_job(bContext *C, MultiresBakeJob *bkj) ob = base->object; - multires_force_update(ob); + multires_flush_sculpt_updates(ob); data = MEM_callocN(sizeof(MultiresBakerJobData), "multiresBaker derivedMesh_data"); diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index 88d01936882..c437f00684d 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -677,7 +677,7 @@ static int modifier_apply_obdata( /* Multires: ensure that recent sculpting is applied */ if (md_eval->type == eModifierType_Multires) { - multires_force_update(ob); + multires_force_sculpt_rebuild(ob); } if (mmd && mmd->totlvl && mti->type == eModifierTypeType_OnlyDeform) { diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index 83b9abe5f3e..f9a7e59c509 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -1099,7 +1099,7 @@ static bool sculpt_brush_test_cyl(SculptBrushTest *test, static bool sculpt_automasking_enabled(SculptSession *ss, const Brush *br) { // REMOVE WITH PBVH_GRIDS - if (BKE_pbvh_type(ss->pbvh) == PBVH_GRIDS) { + if (ss->pbvh && BKE_pbvh_type(ss->pbvh) == PBVH_GRIDS) { return false; } @@ -7529,13 +7529,11 @@ void ED_object_sculptmode_exit_ex(Main *bmain, Depsgraph *depsgraph, Scene *scen const int mode_flag = OB_MODE_SCULPT; Mesh *me = BKE_mesh_from_object(ob); - MultiresModifierData *mmd = BKE_sculpt_multires_active(scene, ob); - if (mmd) { - multires_force_update(ob); - } + multires_flush_sculpt_updates(ob); /* Not needed for now. */ #if 0 + MultiresModifierData *mmd = BKE_sculpt_multires_active(scene, ob); const int flush_recalc = ed_object_sculptmode_flush_recalc_flag(scene, ob, mmd); #endif diff --git a/source/blender/editors/util/ed_util.c b/source/blender/editors/util/ed_util.c index c2566d111cf..f5548119e0a 100644 --- a/source/blender/editors/util/ed_util.c +++ b/source/blender/editors/util/ed_util.c @@ -245,7 +245,7 @@ bool ED_editors_flush_edits(Main *bmain, bool for_render) * may cause a flush on saving: T53986. */ if ((ob->sculpt && ob->sculpt->cache) == 0) { /* flush multires changes (for sculpt) */ - multires_force_update(ob); + multires_flush_sculpt_updates(ob); has_edited = true; if (for_render) { |