[Bf-blender-cvs] [a2a3e040d42] temp-workspace-changes: Workspace: SETLOOPER should get render layer from workspace

Dalai Felinto noreply at git.blender.org
Fri Sep 8 23:55:02 CEST 2017


Commit: a2a3e040d424d0f284493e05a6ffa46cb7bf00c3
Author: Dalai Felinto
Date:   Fri Sep 8 17:13:32 2017 +0200
Branches: temp-workspace-changes
https://developer.blender.org/rBa2a3e040d424d0f284493e05a6ffa46cb7bf00c3

Workspace: SETLOOPER should get render layer from workspace

Right now we are still passing NULL instead of the workspace in most of
those cases. That shouldn't matter much since this will simply bring
back the previous behaviour.

Also, most of those calls (gpu_material.c, view3d_draw_legacy.c,
render_internal.c) are from deprecated areas of Blender anyways.

The areas that will need to be addressed are:
* physics (collision.c)
* particles (pointcache.c)
* sound (sound.c)

And of course:
* game engine (BL_BlenderDataCoversion.cpp)

It's not clear to me, however, why some of those areas are using the
SET_LOOPER in the first place. SET_LOOPER acts on top of bases so we
want to iterate over the SceneLayer objects, not all of scene ones.

However in some cases it seems that the original design was expecting to
loop over all the objects (+ the set objects).

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

M	source/blender/blenkernel/BKE_scene.h
M	source/blender/blenkernel/intern/collision.c
M	source/blender/blenkernel/intern/pointcache.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenkernel/intern/sound.c
M	source/blender/editors/render/render_internal.c
M	source/blender/editors/space_view3d/view3d_draw_legacy.c
M	source/blender/gpu/intern/gpu_material.c
M	source/blender/makesrna/intern/rna_scene.c
M	source/blender/render/intern/source/convertblender.c
M	source/blender/render/intern/source/pipeline.c
M	source/gameengine/Converter/BL_BlenderDataConversion.cpp

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

diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index d0c913d7235..d9dca3c7e85 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -52,7 +52,7 @@ struct Scene;
 struct SceneCollection;
 struct SceneLayer;
 struct UnitSettings;
-struct Main;
+struct WorkSpace;
 
 typedef enum eSceneCopyMethod {
 	SCE_COPY_NEW       = 0,
@@ -63,12 +63,12 @@ typedef enum eSceneCopyMethod {
 } eSceneCopyMethod;
 
 /* Use as the contents of a 'for' loop: for (SETLOOPER(...)) { ... */
-#define SETLOOPER(_sce_basis, _sce_iter, _base)                               \
-	_sce_iter = _sce_basis, _base = _setlooper_base_step(&_sce_iter, NULL);   \
+#define SETLOOPER(_sce_basis, _workspace, _sce_iter, _base)                               \
+	_sce_iter = _sce_basis, _base = _setlooper_base_step(&_sce_iter, _workspace, NULL);   \
 	_base;                                                                    \
-	_base = _setlooper_base_step(&_sce_iter, _base)
+	_base = _setlooper_base_step(&_sce_iter, _workspace, _base)
 
-struct Base *_setlooper_base_step(struct Scene **sce_iter, struct Base *base);
+struct Base *_setlooper_base_step(struct Scene **sce_iter, struct WorkSpace *workspace, struct Base *base);
 
 void free_avicodecdata(struct AviCodecData *acd);
 void free_qtcodecdata(struct QuicktimeCodecData *acd);
diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c
index acb48a9646f..e8afb16d61a 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -531,7 +531,7 @@ Object **get_collisionobjects_ext(Scene *scene, Object *self, Group *group, unsi
 	else {
 		Scene *sce_iter;
 		/* add objects in same layer in scene */
-		for (SETLOOPER(scene, sce_iter, base)) {
+		for (SETLOOPER(scene, NULL, sce_iter, base)) {
 			if ((base->flag & BASE_VISIBLED) != 0) {
 				add_collision_object(&objs, &numobj, &maxobj, base->object, self, level, modifier_type);
 			}
@@ -599,7 +599,7 @@ ListBase *get_collider_cache(Scene *scene, Object *self, Group *group)
 		Base *base;
 
 		/* add objects in same layer in scene */
-		for (SETLOOPER(scene, sce_iter, base)) {
+		for (SETLOOPER(scene, NULL, sce_iter, base)) {
 			if (!self || ((base->flag & BASE_VISIBLED) != 0))
 				add_collider_cache_object(&objs, base->object, self, 0);
 
diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c
index 5ec3156f4df..b3545221802 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -3603,7 +3603,7 @@ void BKE_ptcache_bake(PTCacheBaker *baker)
 		}
 	}
 	else {
-		for (SETLOOPER(scene, sce_iter, base)) {
+		for (SETLOOPER(scene, NULL, sce_iter, base)) {
 			/* cache/bake everything in the scene */
 			BKE_ptcache_ids_from_object(&pidlist, base->object, scene, MAX_DUPLI_RECUR);
 
@@ -3714,7 +3714,7 @@ void BKE_ptcache_bake(PTCacheBaker *baker)
 		}
 	}
 	else {
-		for (SETLOOPER(scene, sce_iter, base)) {
+		for (SETLOOPER(scene, NULL, sce_iter, base)) {
 			BKE_ptcache_ids_from_object(&pidlist, base->object, scene, MAX_DUPLI_RECUR);
 
 			for (pid=pidlist.first; pid; pid=pid->next) {
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 5d974192241..b3d9bd79760 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1879,30 +1879,33 @@ float get_render_aosss_error(const RenderData *r, float error)
   * It iterates over the bases of the active layer and then the bases
   * of the active layer of the background (set) scenes recursively.
   */
-Base *_setlooper_base_step(Scene **sce_iter, Base *base)
+Base *_setlooper_base_step(Scene **sce_iter, struct WorkSpace *workspace, Base *base)
 {
 	if (base && base->next) {
-		/* common case, step to the next */
+		/* Common case, step to the next. */
 		return base->next;
 	}
 	else if (base == NULL) {
-		/* first time looping, return the scenes first base */
+		/* First time looping, return the scenes first base. */
+		/* For the first loop we should get the layer from workspace when available. */
 
-		/* for the first loop we should get the layer from context */
-		SceneLayer *sl = BKE_scene_layer_context_active_PLACEHOLDER((*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;
+		SceneLayer *sl;
+		if (workspace == NULL) {
+			sl = BKE_scene_layer_from_scene_get((*sce_iter));
+		}
+		else {
+			sl = BKE_scene_layer_from_workspace_get((*sce_iter), workspace);
+		}
 
 		if (sl->object_bases.first) {
 			return (Base *)sl->object_bases.first;
 		}
-		/* no base on this scene layer */
+		/* No base on this scene layer. */
 		goto next_set;
 	}
 	else {
 next_set:
-		/* reached the end, get the next base in the set */
+		/* Reached the end, get the next base in the set. */
 		while ((*sce_iter = (*sce_iter)->set)) {
 			SceneLayer *sl = BKE_scene_layer_from_scene_get((*sce_iter));
 			base = (Base *)sl->object_bases.first;
diff --git a/source/blender/blenkernel/intern/sound.c b/source/blender/blenkernel/intern/sound.c
index 94fa81308fe..07acdb5c6e3 100644
--- a/source/blender/blenkernel/intern/sound.c
+++ b/source/blender/blenkernel/intern/sound.c
@@ -818,7 +818,7 @@ void BKE_sound_update_scene(Main *bmain, struct Scene *scene)
 
 	/* cheap test to skip looping over all objects (no speakers is a common case) */
 	if (!BLI_listbase_is_empty(&bmain->speaker)) {
-		for (SETLOOPER(scene, sce_it, base)) {
+		for (SETLOOPER(scene, NULL, sce_it, base)) {
 			ob = base->object;
 			if ((ob->type != OB_SPEAKER) || !ob->adt) {
 				continue;
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index f915fd5ec64..c131824d349 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -797,7 +797,7 @@ static void clean_viewport_memory(Main *bmain, Scene *scene)
 		object->id.tag |= LIB_TAG_DOIT;
 	}
 
-	for (SETLOOPER(scene, sce_iter, base)) {
+	for (SETLOOPER(scene, NULL, sce_iter, base)) {
 		if ((base->flag & BASE_VISIBLED) == 0) {
 			continue;
 		}
@@ -806,7 +806,7 @@ static void clean_viewport_memory(Main *bmain, Scene *scene)
 		}
 	}
 
-	for (SETLOOPER(scene, sce_iter, base)) {
+	for (SETLOOPER(scene, NULL, sce_iter, base)) {
 		object = base->object;
 		if ((object->id.tag & LIB_TAG_DOIT) == 0) {
 			continue;
diff --git a/source/blender/editors/space_view3d/view3d_draw_legacy.c b/source/blender/editors/space_view3d/view3d_draw_legacy.c
index 73ffe949823..cd0beefc225 100644
--- a/source/blender/editors/space_view3d/view3d_draw_legacy.c
+++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c
@@ -1215,7 +1215,7 @@ void ED_view3d_draw_depth_loop(const EvaluationContext *eval_ctx, Scene *scene,
 	/* draw set first */
 	if (scene->set) {
 		Scene *sce_iter;
-		for (SETLOOPER(scene->set, sce_iter, base)) {
+		for (SETLOOPER(scene->set, NULL, sce_iter, base)) {
 			if ((base->flag & BASE_VISIBLED) != 0) {
 				draw_object(eval_ctx, scene, sl, ar, v3d, base, 0);
 				if (base->object->transflag & OB_DUPLI) {
@@ -1391,7 +1391,7 @@ static void gpu_update_lamps_shadows_world(const EvaluationContext *eval_ctx, Sc
 	BLI_listbase_clear(&shadows);
 	
 	/* update lamp transform and gather shadow lamps */
-	for (SETLOOPER(scene, sce_iter, base)) {
+	for (SETLOOPER(scene, NULL, sce_iter, base)) {
 		Object *ob = base->object;
 		
 		if (ob->type == OB_LAMP)
@@ -1574,7 +1574,7 @@ static void view3d_draw_objects(
 	if (scene->set) {
 		const short dflag = DRAW_CONSTCOLOR | DRAW_SCENESET;
 		Scene *sce_iter;
-		for (SETLOOPER(scene->set, sce_iter, base)) {
+		for (SETLOOPER(scene->set, NULL, sce_iter, base)) {
 			if ((base->flag & BASE_VISIBLED) != 0) {
 				UI_ThemeColorBlend(TH_WIRE, TH_BACK, 0.6f);
 				draw_object(eval_ctx, scene, sl, ar, v3d, base, dflag);
@@ -1941,7 +1941,7 @@ static void update_lods(Scene *scene, float camera_pos[3])
 	Scene *sce_iter;
 	Base *base;
 
-	for (SETLOOPER(scene, sce_iter, base)) {
+	for (SETLOOPER(scene, NULL, sce_iter, base)) {
 		Object *ob = base->object;
 		BKE_object_lod_update(ob, camera_pos);
 	}
diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c
index a08bef4472a..314292c15c2 100644
--- a/source/blender/gpu/intern/gpu_material.c
+++ b/source/blender/gpu/intern/gpu_material.c
@@ -998,7 +998,7 @@ static void material_lights(GPUShadeInput *shi, GPUShadeResult *shr)
 	Base *base;
 	Scene *sce_iter;
 	
-	for (SETLOOPER(shi->gpumat->scene, sce_iter, base)) {
+	for (SETLOOPER(shi->gpumat->scene, NULL, sce_iter, base)) {
 		Object *ob = base->object;
 
 		if (ob->type == OB_LAMP) {
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index f61e0212f63..a9b433ab0d8 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -462,6 +462,7 @@ EnumPropertyItem rna_enum_layer_collection_mode_settings_type_items[] = {
 #include "DNA_object_types.h"
 #include "DNA_mesh_types.h"
 #include "DNA_text_types.h"
+#include "DNA_workspace_types.h"
 
 #include "RNA_access.h"
 
@@ -1863,26 +1864,28 @@ static void object_simplify_update(Object *ob)
 	}
 }
 
-static void rna_Scene_use_simplify_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_Scene_use_simplify_update(bContext *C, PointerRNA *ptr)
 {
+	Main *bmain = CTX_data_main(C);
+	WorkSpace *workspace = CTX_wm_workspace(C);
 	Scene *sce = ptr->id.data;
 	Scene *sce_iter;
 	Base *base;
 
 	BKE_main_id_tag_listbase(&bmain->object, LIB_TAG_DOIT, true);
-	for (SETLOOPER(sce, sce_iter, base))
+	for (SETLOOPER(sce, workspace, sce_iter, base))
 		object_simplify_update(base->object);
 	
 	WM_main_add_notifier(NC_GEOM | ND_DATA, NULL);
-	DEG_id_tag_update(&scene->id, 0);
+	DEG_id_tag_update(&sce->id, 0);
 }
 
-static void rna_Scene_simplify_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
+static void 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list