diff options
Diffstat (limited to 'source/blender/editors/screen/screen_edit.c')
-rw-r--r-- | source/blender/editors/screen/screen_edit.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index e00f98c59e8..abf049ffc83 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -1505,6 +1505,7 @@ void ED_screen_set(bContext *C, bScreen *sc) if (oldscreen != sc) { wmTimer *wt = oldscreen->animtimer; ScrArea *sa; + Scene *oldscene = oldscreen->scene; /* remove handlers referencing areas in old screen */ for (sa = oldscreen->areabase.first; sa; sa = sa->next) { @@ -1531,6 +1532,21 @@ void ED_screen_set(bContext *C, bScreen *sc) /* makes button hilites work */ WM_event_add_mousemove(C); + + /* Needed to make sure all the derivedMeshes are + * up-to-date before viewport starts acquiring this. + * + * This is needed in cases when, for example, boolean + * modifier uses operant from invisible layer. + * Without this trick boolean wouldn't apply correct. + * + * Quite the same happens when setting screen's scene, + * so perhaps this is in fact correct thing to do. + */ + if (oldscene != sc->scene) { + BKE_scene_set_background(bmain, sc->scene); + DAG_on_visible_update(bmain, FALSE); + } } } @@ -2016,7 +2032,7 @@ void ED_update_for_newframe(Main *bmain, Scene *scene, int UNUSED(mute)) layers |= BKE_screen_visible_layers(window->screen, scene); /* this function applies the changes too */ - BKE_scene_update_for_newframe(bmain, scene, layers); /* BKE_scene.h */ + BKE_scene_update_for_newframe(bmain->eval_ctx, bmain, scene, layers); //if ( (CFRA>1) && (!mute) && (scene->r.audio.flag & AUDIO_SCRUB)) // audiostream_scrub( CFRA ); |