[Bf-blender-cvs] [ff67b9010c] workspaces: Fix wrong render layer used for multi-window setups

Julian Eisel noreply at git.blender.org
Fri Mar 17 15:10:47 CET 2017


Commit: ff67b9010ce39f8b0effa8e19e8965d55e0fa1b2
Author: Julian Eisel
Date:   Fri Mar 17 14:59:38 2017 +0100
Branches: workspaces
https://developer.blender.org/rBff67b9010ce39f8b0effa8e19e8965d55e0fa1b2

Fix wrong render layer used for multi-window setups

===================================================================

M	source/blender/blenkernel/intern/layer.c
M	source/blender/blenkernel/intern/scene.c

===================================================================

diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 50922482f2..9953f5e5a1 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -76,18 +76,16 @@ SceneLayer *BKE_scene_layer_render_active(const Scene *scene)
 }
 
 /**
- * Returns the SceneLayer to be used for drawing, outliner, and
- * other context related areas.
+ * Returns the SceneLayer to be used for drawing, outliner, and other context related areas.
  */
-SceneLayer *BKE_scene_layer_context_active_ex(const Main *bmain, const Scene *scene)
+SceneLayer *BKE_scene_layer_context_active_ex(const Main *bmain, const Scene *UNUSED(scene))
 {
-	/* XXX iterating over windows here is not so nice, we could pass the workspace or the window as argument. */
+	/* XXX We should really pass the workspace as argument, but would require
+	 * some bigger changes since it's often not available where we call this.
+	 * Just working around this by getting active window from WM for now */
 	for (wmWindowManager *wm = bmain->wm.first; wm; wm = wm->id.next) {
-		for (wmWindow *win = wm->windows.first; win; win = win->next) {
-			if (win->scene == scene) {
-				return BKE_workspace_render_layer_get(BKE_workspace_active_get(win->workspace_hook));
-			}
-		}
+		const WorkSpace *workspace = BKE_workspace_active_get(wm->winactive->workspace_hook);
+		return BKE_workspace_render_layer_get(workspace);
 	}
 
 	return NULL;
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index c3d510ba91..274d88648d 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1719,6 +1719,9 @@ Base *_setlooper_base_step(Scene **sce_iter, Base *base)
 
 		/* for the first loop we should get the layer from context */
 		SceneLayer *sl = BKE_scene_layer_context_active((*sce_iter));
+		/* TODO For first scene (non-background set), we should pass the render layer as argument.
+		 * In some cases we want it to be the workspace one, in other the scene one. */
+		TODO_LAYER;
 
 		if (sl->object_bases.first) {
 			return (Base *)sl->object_bases.first;




More information about the Bf-blender-cvs mailing list