[Bf-blender-cvs] [7d3dd44] soc-2016-layer_manager: Replace most Scene.base iterations with new iterator

Julian Eisel noreply at git.blender.org
Sat Jul 9 17:27:58 CEST 2016


Commit: 7d3dd446ff17ba31fecea855d9675990c6364329
Author: Julian Eisel
Date:   Sat Jul 9 16:46:09 2016 +0200
Branches: soc-2016-layer_manager
https://developer.blender.org/rB7d3dd446ff17ba31fecea855d9675990c6364329

Replace most Scene.base iterations with new iterator

Most changes are un-tested :)

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

M	source/blender/blenkernel/intern/anim.c
M	source/blender/blenkernel/intern/effect.c
M	source/blender/blenkernel/intern/library_remap.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/object_dupli.c
M	source/blender/blenkernel/intern/particle_system.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenkernel/intern/softbody.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/collada/EffectExporter.cpp
M	source/blender/editors/animation/anim_channels_edit.c
M	source/blender/editors/animation/anim_filter.c
M	source/blender/editors/object/object_add.c
M	source/blender/editors/object/object_select.c
M	source/blender/editors/object/object_vgroup.c
M	source/blender/editors/physics/physics_pointcache.c
M	source/blender/editors/render/render_preview.c
M	source/blender/editors/screen/screen_context.c
M	source/blender/editors/space_clip/tracking_ops_orient.c
M	source/blender/editors/space_info/info_stats.c
M	source/blender/editors/space_layers/layers_ops.c
M	source/blender/editors/space_nla/nla_channels.c
M	source/blender/editors/space_outliner/outliner_tree.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/editors/space_view3d/view3d_edit.c
M	source/blender/editors/space_view3d/view3d_select.c
M	source/blender/editors/space_view3d/view3d_view.c
M	source/blender/editors/transform/transform_conversions.c
M	source/blender/editors/transform/transform_orientations.c
M	source/blender/editors/transform/transform_snap_object.c
M	source/blender/editors/uvedit/uvedit_draw.c
M	source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
M	source/blender/gpu/intern/gpu_draw.c
M	source/blender/modifiers/intern/MOD_cloth.c
M	source/blender/modifiers/intern/MOD_dynamicpaint.c
M	source/blender/modifiers/intern/MOD_fluidsim.c
M	source/blender/modifiers/intern/MOD_smoke.c
M	source/blender/render/intern/source/envmap.c

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

diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c
index 7d3d12a..c469c3e 100644
--- a/source/blender/blenkernel/intern/anim.c
+++ b/source/blender/blenkernel/intern/anim.c
@@ -48,6 +48,7 @@
 #include "BKE_global.h"
 #include "BKE_key.h"
 #include "BKE_main.h"
+#include "BKE_layer.h"
 #include "BKE_object.h"
 #include "BKE_particle.h"
 #include "BKE_scene.h"
@@ -275,15 +276,16 @@ void animviz_get_object_motionpaths(Object *ob, ListBase *targets)
 /* tweak the object ordering to trick depsgraph into making MotionPath calculations run faster */
 static void motionpaths_calc_optimise_depsgraph(Scene *scene, ListBase *targets)
 {
-	Base *base, *baseNext;
-	MPathTarget *mpt;
-	
 	/* make sure our temp-tag isn't already in use */
-	for (base = scene->base.first; base; base = base->next)
+	BKE_BASES_ITER_START(scene)
+	{
 		base->object->flag &= ~BA_TEMP_TAG;
+	}
+	BKE_BASES_ITER_END;
 	
 	/* for each target, dump its object to the start of the list if it wasn't moved already */
-	for (mpt = targets->first; mpt; mpt = mpt->next) {
+	Base *base, *baseNext;
+	for (MPathTarget *mpt = targets->first; mpt; mpt = mpt->next) {
 		for (base = scene->base.first; base; base = baseNext) {
 			baseNext = base->next;
 			
@@ -313,7 +315,7 @@ static void motionpaths_calc_update_scene(Scene *scene)
 		BKE_scene_update_for_newframe(G.main->eval_ctx, G.main, scene, scene->lay);
 	}
 	else { /* otherwise we can optimize by restricting updates */
-		Base *base, *last = NULL;
+		Base *last = NULL;
 		
 		/* only stuff that moves or needs display still */
 		DAG_scene_update_flags(G.main, scene, scene->lay, true, false);
@@ -322,15 +324,18 @@ static void motionpaths_calc_update_scene(Scene *scene)
 		 * - all those afterwards are assumed to not be relevant for our calculations
 		 */
 		/* optimize further by moving out... */
-		for (base = scene->base.first; base; base = base->next) {
+		BKE_BASES_ITER_START(scene)
+		{
 			if (base->object->flag & BA_TEMP_TAG)
 				last = base;
 		}
+		BKE_BASES_ITER_END;
 		
 		/* perform updates for tagged objects */
 		/* XXX: this will break if rigs depend on scene or other data that
 		 * is animated but not attached to/updatable from objects */
-		for (base = scene->base.first; base; base = base->next) {
+		BKE_BASES_ITER_START(scene)
+		{
 			/* update this object */
 			BKE_object_handle_update(G.main->eval_ctx, scene, base->object);
 			
@@ -338,6 +343,7 @@ static void motionpaths_calc_update_scene(Scene *scene)
 			if (base == last)
 				break;
 		}
+		BKE_BASES_ITER_END;
 	}
 #else // original, 'always correct' version
 	/* do all updates
diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c
index 5090e46..36046f6 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -64,6 +64,7 @@
 #include "BKE_cdderivedmesh.h"
 #include "BKE_effect.h"
 #include "BKE_global.h"
+#include "BKE_layer.h"
 #include "BKE_library.h"
 #include "BKE_modifier.h"
 #include "BKE_object.h"
@@ -204,10 +205,9 @@ static void add_particles_to_effectors(ListBase **effectors, Scene *scene, Effec
 ListBase *pdInitEffectors(Scene *scene, Object *ob_src, ParticleSystem *psys_src,
                           EffectorWeights *weights, bool precalc)
 {
-	Base *base;
 	unsigned int layer= ob_src->lay;
 	ListBase *effectors = NULL;
-	
+
 	if (weights->group) {
 		GroupObject *go;
 		
@@ -226,7 +226,8 @@ ListBase *pdInitEffectors(Scene *scene, Object *ob_src, ParticleSystem *psys_src
 		}
 	}
 	else {
-		for (base = scene->base.first; base; base= base->next) {
+		BKE_BASES_ITER_START(scene)
+		{
 			if ( (base->lay & layer) ) {
 				if ( base->object->pd && base->object->pd->forcefield )
 					add_object_to_effectors(&effectors, scene, weights, base->object, ob_src);
@@ -239,6 +240,7 @@ ListBase *pdInitEffectors(Scene *scene, Object *ob_src, ParticleSystem *psys_src
 				}
 			}
 		}
+		BKE_BASES_ITER_END;
 	}
 	
 	if (precalc)
diff --git a/source/blender/blenkernel/intern/library_remap.c b/source/blender/blenkernel/intern/library_remap.c
index 81543fa..7920525 100644
--- a/source/blender/blenkernel/intern/library_remap.c
+++ b/source/blender/blenkernel/intern/library_remap.c
@@ -81,6 +81,7 @@
 #include "BKE_key.h"
 #include "BKE_lamp.h"
 #include "BKE_lattice.h"
+#include "BKE_layer.h"
 #include "BKE_library.h"
 #include "BKE_library_query.h"
 #include "BKE_library_remap.h"
@@ -423,7 +424,8 @@ void BKE_libblock_remap_locked(
 				for (Scene *sce = bmain->scene.first; sce; sce = sce->id.next) {
 					/* Note that here we assume no object has no base (i.e. all objects are assumed instanced
 					 * in one scene...). */
-					for (Base *base = sce->base.first; base; base = base->next) {
+					BKE_BASES_ITER_START(sce)
+					{
 						if (base->flag & OB_FROMGROUP) {
 							Object *ob = base->object;
 
@@ -443,6 +445,7 @@ void BKE_libblock_remap_locked(
 							}
 						}
 					}
+					BKE_BASES_ITER_END;
 				}
 			}
 			break;
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 22ab232..b268e7c 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -92,6 +92,7 @@
 #include "BKE_key.h"
 #include "BKE_lamp.h"
 #include "BKE_lattice.h"
+#include "BKE_layer.h"
 #include "BKE_library.h"
 #include "BKE_linestyle.h"
 #include "BKE_mesh.h"
@@ -151,12 +152,13 @@ void BKE_object_workob_clear(Object *workob)
 
 void BKE_object_update_base_layer(struct Scene *scene, Object *ob)
 {
-	Base *base = scene->base.first;
-
-	while (base) {
-		if (base->object == ob) base->lay = ob->lay;
-		base = base->next;
+	BKE_BASES_ITER_START(scene)
+	{
+		if (base->object == ob) {
+			base->lay = ob->lay;
+		}
 	}
+	BKE_BASES_ITER_END;
 }
 
 void BKE_object_free_particlesystems(Object *ob)
@@ -1218,7 +1220,6 @@ void BKE_object_make_local(Object *ob)
 {
 	Main *bmain = G.main;
 	Scene *sce;
-	Base *base;
 	bool is_local = false, is_lib = false;
 
 	/* - only lib users: do nothing
@@ -1257,15 +1258,15 @@ void BKE_object_make_local(Object *ob)
 			sce = bmain->scene.first;
 			while (sce) {
 				if (!ID_IS_LINKED_DATABLOCK(sce)) {
-					base = sce->base.first;
-					while (base) {
+					BKE_BASES_ITER_START(sce)
+					{
 						if (base->object == ob) {
 							base->object = ob_new;
 							id_us_plus(&ob_new->id);
 							id_us_min(&ob->id);
 						}
-						base = base->next;
 					}
+					BKE_BASES_ITER_END;
 				}
 				sce = sce->id.next;
 			}
@@ -3430,15 +3431,16 @@ LinkNode *BKE_object_relational_superset(struct Scene *scene, eObjectSet objectS
 {
 	LinkNode *links = NULL;
 
-	Base *base;
-
 	/* Remove markers from all objects */
-	for (base = scene->base.first; base; base = base->next) {
+	BKE_BASES_ITER_START(scene)
+	{
 		base->object->id.tag &= ~LIB_TAG_DOIT;
 	}
+	BKE_BASES_ITER_END;
 
 	/* iterate over all selected and visible objects */
-	for (base = scene->base.first; base; base = base->next) {
+	BKE_BASES_ITER_START(scene)
+	{
 		if (objectSet == OB_SET_ALL) {
 			/* as we get all anyways just add it */
 			Object *ob = base->object;
@@ -3474,10 +3476,10 @@ LinkNode *BKE_object_relational_superset(struct Scene *scene, eObjectSet objectS
 
 				/* child relationship */
 				if (includeFilter & (OB_REL_CHILDREN | OB_REL_CHILDREN_RECURSIVE)) {
-					Base *local_base;
-					for (local_base = scene->base.first; local_base; local_base = local_base->next) {
+					/* FIXME O(n^2) */
+					BKE_BASES_ITER_START_EX(scene, k, local_litem, local_oblayer, l, local_base)
+					{
 						if (BASE_EDITABLE_BGMODE(((View3D *)NULL), scene, local_base)) {
-
 							Object *child = local_base->object;
 							if (obrel_list_test(child)) {
 								if ((includeFilter & OB_REL_CHILDREN_RECURSIVE && BKE_object_is_child_recursive(ob, child)) ||
@@ -3488,6 +3490,7 @@ LinkNode *BKE_object_relational_superset(struct Scene *scene, eObjectSet objectS
 							}
 						}
 					}
+					BKE_BASES_ITER_END;
 				}
 
 
@@ -3502,6 +3505,7 @@ LinkNode *BKE_object_relational_superset(struct Scene *scene, eObjectSet objectS
 			}
 		}
 	}
+	BKE_BASES_ITER_END;
 
 	return links;
 }
diff --git a/source/blender/blenkernel/intern/object_dupli.c b/source/blender/blenkernel/intern/object_dupli.c
index c03f7c2..90020b2 100644
--- a/source/blender/blenkernel/intern/object_dupli.c
+++ b/source/blender/blenkernel/intern/object_dupli.c
@@ -54,6 +54,7 @@
 #include "BKE_group.h"
 #include "BKE_global.h"
 #include "BKE_lattice.h"
+#include "BKE_layer.h"
 #include "BKE_main.h"
 #include "BKE_mesh.h"
 #include "BKE_object.h"
@@ -237,8 +238,8 @@ static void make_child_duplis(const DupliContext *ctx, void *userdata, MakeChild
 	}
 	else {
 		unsigned int lay = ctx->scene->lay;
-		Base *base;
-		for (base = ctx->scene->base.first; base; base = base->next) {
+		BKE_BASES_ITER_START(ctx->scene)
+		{
 			Object *ob = base->object;
 
 			if ((base->lay & lay) && ob != obedit && is_child(ob, parent)) {
@@ -249,6 +250,7 @@ static void make_child_duplis(const DupliContext *ctx, void *userdata, MakeChild
 				make_child_duplis_cb(ctx, userdata, ob);
 			}
 		}
+		BKE_BASES_ITER_END;
 	}
 }
 
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index c3f47fa..851b609 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -83,6 +83,7 @@
 #include "BKE_material.h"
 #include "BKE_cloth.h"
 #include "BKE_lattice.h"
+#include "BKE_layer.h"
 #include "BKE_pointcache.h"
 #include "BKE_mesh.h"
 #include "BKE_modifier.h"
@@ -2890,7 +2891,6 @@ static void psys_update_path_cache(ParticleSimulationData *sim, float cfra, cons
 	ParticleSystem *psys = sim->psys;
 	ParticleSettings *part = psys->part;
 	ParticleEditSettings *pset = &sim->scene->toolsettings->particle;
-	Base *base;
 	int distr=0, alloc=0, skip=0;
 
 	if ((psys->part->childtype && psys->totchild != psys_get_tot_child(sim->scene, psys)) || psys->recalc&PSYS_RECALC_RESET)
@@ -2935,7 +2935,8 @@ static void psys_update_path_cache(ParticleSimulationData *sim, float cfra, cons
 
 
 	/* particle instance modifier with "path" option need cac

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list