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:
Diffstat (limited to 'source/blender/editors/screen/screen_edit.c')
-rw-r--r--source/blender/editors/screen/screen_edit.c18
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 );