[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