Commit: 99cc2972717ead7848cafc322fa76cd4301faa4f
Author: Julian Eisel
Date:   Fri Aug 12 15:28:39 2016 +0200
Branches: soc-2016-layer_manager
https://developer.blender.org/rB99cc2972717ead7848cafc322fa76cd4301faa4f

Refactor base iterators to be much simpler

Make use of the new BKE_objectlayer_base_first_find and 
BKE_objectlayer_base_next_find functions, instead of doing some cryptic, nested 
loop stuff.

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

M       source/blender/blenkernel/BKE_object.h
M       source/blender/blenkernel/intern/anim.c
M       source/blender/blenkernel/intern/depsgraph.c
M       source/blender/blenkernel/intern/effect.c
M       source/blender/blenkernel/intern/library_query.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/object_layer.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/depsgraph/intern/builder/deg_builder_nodes.cc
M       source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M       source/blender/editors/animation/anim_channels_edit.c
M       source/blender/editors/animation/anim_filter.c
M       source/blender/editors/armature/editarmature_sketch.c
M       source/blender/editors/object/object_add.c
M       source/blender/editors/object/object_edit.c
M       source/blender/editors/object/object_relations.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_logic/logic_window.c
M       source/blender/editors/space_nla/nla_channels.c
M       source/blender/editors/space_outliner/outliner_select.c
M       source/blender/editors/space_outliner/outliner_tools.c
M       source/blender/editors/space_outliner/outliner_tree.c
M       source/blender/editors/space_time/space_time.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_manipulator.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/makesrna/intern/rna_object_force.c
M       source/blender/makesrna/intern/rna_scene.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/BKE_object.h 
b/source/blender/blenkernel/BKE_object.h
index fcdfd91..2b940bf 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -277,41 +277,27 @@ bool BKE_object_modifier_update_subframe(struct Scene 
*scene, struct Object *ob,
                Base *base_name = oblayer->bases[idx_name];
 #define BKE_OBJECTLAYER_BASES_ITER_END } (void)0
 
-/* Use this if BKE_BASES_ITER_START doesn't give enough control over variable 
names.
- * Doesn't do layer visibility-bit check, even with skip_hidden is true. */
-#define BKE_BASES_ITER_START_EX( \
-           scene, layeridx_name, litem_name, oblayer_name, \
-           baseidx_name, base_name, break_layiter_name, skip_hidden) \
-       BKE_LAYERTREE_ITER_START(scene->object_layers, 0, layeridx_name, 
litem_name) \
+#define BKE_BASES_ITER_START_EX(scene, base_name, skip_hidden) \
+       for (Base *base_name = 
BKE_objectlayer_base_first_find(scene->object_layers), *base_name##_next; \
+            base_name != NULL; \
+            base_name = base_name##_next) \
        { \
-               bool break_layiter_name = false; \
-               if ((litem_name->type->type == LAYER_ITEMTYPE_LAYER) && \
-                   (!skip_hidden || BKE_layeritem_is_visible(litem_name))) \
-               { \
-                       LayerTypeObject *oblayer_name = (LayerTypeObject 
*)litem_name; \
-                       BKE_OBJECTLAYER_BASES_ITER_START(oblayer_name, 
baseidx_name, base_name) \
-                               if (skip_hidden && 
(base_name->object->restrictflag & OB_RESTRICT_VIEW)) \
-                                       continue;
-/* End BKE_BASES_ITER_ */
-#define BKE_BASES_ITER_END_EX(break_layiter_name) \
-                       BKE_OBJECTLAYER_BASES_ITER_END; \
-               } \
-               if (break_layiter_name) \
-                       break; \
-       } \
-       BKE_LAYERTREE_ITER_END /* ends with (void)0 */
-
-/* Start iterating over all bases of the scene, ignoring visibility. This is 
basically a wrapper around
- * layer tree and object layer iterator to make access a bit easier. Uses 
default variable names. */
-#define BKE_BASES_ITER_START(scene) \
-       BKE_BASES_ITER_START_EX(scene, i, litem, oblayer, j, base, 
break_layiter, false)
+               /* store next base here to allow removing base_name */ \
+               base_name##_next = BKE_objectlayer_base_next_find(base_name, 
skip_hidden); \
+               if (skip_hidden && (base_name->object->restrictflag & 
OB_RESTRICT_VIEW)) \
+                       continue;
+
+/* Start iterating over all bases of the scene, ignoring visibility. */
+#define BKE_BASES_ITER_START(scene, base_name) \
+       BKE_BASES_ITER_START_EX(scene, base_name, false)
 
 /* Version of BKE_BASES_ITER_START that skips invisible layers and
  * invisible objects. Doesn't do layer visibility-bit check.*/
-#define BKE_BASES_ITER_VISIBLE_START(scene) \
-       BKE_BASES_ITER_START_EX(scene, i, litem, oblayer, j, base, 
break_layiter, true)
+#define BKE_BASES_ITER_VISIBLE_START(scene, base_name) \
+       BKE_BASES_ITER_START_EX(scene, base_name, true)
 
-#define BKE_BASES_ITER_END BKE_BASES_ITER_END_EX(break_layiter)
+#define BKE_BASES_ITER_END \
+       } (void)0
 
 struct LayerTreeItem *BKE_objectlayer_add(struct LayerTree *tree, struct 
LayerTreeItem *parent, const char *name);
 void BKE_objectlayer_free(struct LayerTreeItem *litem);
@@ -326,7 +312,7 @@ int  BKE_objectlayer_bases_count(const struct LayerTree 
*ltree);
 
 struct Base *BKE_objectlayer_base_first_find(const struct LayerTree *ltree);
 struct Base *BKE_objectlayer_base_last_find(const struct LayerTree *ltree);
-struct Base *BKE_objectlayer_base_next_find(const struct Base *prev);
+struct Base *BKE_objectlayer_base_next_find(const struct Base *prev, const 
bool skip_hidden_layers);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/blenkernel/intern/anim.c 
b/source/blender/blenkernel/intern/anim.c
index 6de3845..5e87de7 100644
--- a/source/blender/blenkernel/intern/anim.c
+++ b/source/blender/blenkernel/intern/anim.c
@@ -277,7 +277,7 @@ void animviz_get_object_motionpaths(Object *ob, ListBase 
*targets)
 static void motionpaths_calc_optimise_depsgraph(Scene *scene, ListBase 
*targets)
 {
        /* make sure our temp-tag isn't already in use */
-       BKE_BASES_ITER_START(scene)
+       BKE_BASES_ITER_START(scene, base)
        {
                base->object->flag &= ~BA_TEMP_TAG;
        }
@@ -285,14 +285,13 @@ static void motionpaths_calc_optimise_depsgraph(Scene 
*scene, ListBase *targets)
        
        /* for each target, dump its object to the start of the list if it 
wasn't moved already */
        for (MPathTarget *mpt = targets->first; mpt; mpt = mpt->next) {
-               BKE_BASES_ITER_START(scene)
+               BKE_BASES_ITER_START(scene, base)
                {
                        if ((base->object == mpt->ob) && !(mpt->ob->flag & 
BA_TEMP_TAG)) {
-                               BKE_layeritem_move(litem, 0, true);
+                               BKE_layeritem_move(base->layer, 0, true);
                                mpt->ob->flag |= BA_TEMP_TAG;
                                
                                /* we really don't need to continue anymore 
once this happens, but this line might really 'break' */
-                               break_layiter = true;
                                break;
                        }
                }
@@ -322,7 +321,7 @@ 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... */
-               BKE_BASES_ITER_START(scene)
+               BKE_BASES_ITER_START(scene, base)
                {
                        if (base->object->flag & BA_TEMP_TAG)
                                last = base;
@@ -332,7 +331,7 @@ static void motionpaths_calc_update_scene(Scene *scene)
                /* 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 */
-               BKE_BASES_ITER_START(scene)
+               BKE_BASES_ITER_START(scene, base)
                {
                        /* update this object */
                        BKE_object_handle_update(G.main->eval_ctx, scene, 
base->object);
diff --git a/source/blender/blenkernel/intern/depsgraph.c 
b/source/blender/blenkernel/intern/depsgraph.c
index 1a861af..75810e9 100644
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ b/source/blender/blenkernel/intern/depsgraph.c
@@ -487,7 +487,7 @@ static void dag_add_collision_field_relation(DagForest 
*dag, Scene *scene, Objec
 
        /* would be nice to have a list of colliders here
         * so for now walk all objects in scene check 'same layer rule' */
-       BKE_BASES_ITER_VISIBLE_START(scene)
+       BKE_BASES_ITER_VISIBLE_START(scene, base)
        {
                if ((base->lay & ob->lay)) {
                        Object *ob1 = base->object;
@@ -951,7 +951,7 @@ DagForest *build_dag(Main *bmain, Scene *sce, short mask)
        scenenode = dag_add_node(dag, sce);
        
        /* add current scene objects */
-       BKE_BASES_ITER_START(sce)
+       BKE_BASES_ITER_START(sce, base)
        {
                ob = base->object;
                ob->id.tag |= LIB_TAG_DOIT;
@@ -1445,7 +1445,7 @@ static void scene_sort_groups(Main *bmain, Scene *sce)
                ob->id.tag &= ~LIB_TAG_DOIT;
                ob->id.newid = NULL; /* newid abuse for GroupObject */
        }
-       BKE_BASES_ITER_START(sce)
+       BKE_BASES_ITER_START(sce, base)
        {
                base->object->id.tag |= LIB_TAG_DOIT;
        }
@@ -1464,7 +1464,7 @@ static void scene_sort_groups(Main *bmain, Scene *sce)
                                go->ob->id.newid = (ID *)go;
                        
                        /* in order of sorted bases we reinsert group objects */
-                       BKE_BASES_ITER_START(sce)
+                       BKE_BASES_ITER_START(sce, base)
                        {
                                if (base->object->id.newid) {
                                        go = (GroupObject 
*)base->object->id.newid;
@@ -1704,7 +1704,7 @@ static void dag_scene_build(Main *bmain, Scene *sce)
        
        if (G.debug & G_DEBUG) {
                printf("\nordered\n");
-               BKE_BASES_ITER_START(sce)
+               BKE_BASES_ITER_START(sce, base)
                {
                        printf(" %s\n", base->object->id.name);
                }
@@ -1959,7 +1959,7 @@ static void dag_scene_flush_layers(Scene *sce, int lay)
        lasttime = sce->theDag->time;
 
        /* update layer flags in nodes */
-       BKE_BASES_ITER_START(sce)
+       BKE_BASES_ITER_START(sce, base)
        {
                node = dag_get_node(sce->theDag, base->object);
                node->scelay = base->object->lay;
@@ -2000,7 +2000,7 @@ static void dag_tag_renderlayers(Scene *sce, unsigned int 
lay)
                bNode *node;
                unsigned int lay_changed = 0;
 
-               BKE_BASES_ITER_VISIBLE_START(sce)
+               BKE_BASES_ITER_VISIBLE_START(sce, base)
                {
                        if (base->lay & lay)
                                if (base->object->recalc)
diff --git a/source/blender/blenkernel/intern/effect.c 
b/source/blender/blenkernel/intern/effect.c
index 36046f6..e925976 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -226,7 +226,7 @@ ListBase *pdInitEffectors(Scene *scene, Object *ob_src, 
ParticleSystem *psys_src
                }
        }
        else {
-               BKE_BASES_ITER_START(scene)
+               BKE_BASES_ITER_START(scene, base)
                {
                        if ( (base->lay & layer) ) {
                                if ( base->object->pd && 
base->object->pd->forcefield )
diff --git a/source/blender/blenkernel/intern/library_query.c 
b/source/blender/blenkernel/intern/library_query.c
index 70c165d..7711854 100644
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@ -374,7 +374,7 @@ void BKE_library_foreach_ID_link(ID *id, 
LibraryIDLinkCallback callback, void *u
 
                                CALLBACK_INVOKE(scene->gpd, IDWALK_USER);
 
-                               BKE_BASES_ITER_START(scene)
+                               BKE_BASES_ITER_START(scene, base)
                                {
                                        CALLBACK_INVOKE(base->object, 
IDWALK_USER);
                                }
diff --git a/source/blender/blenkernel/intern/library_remap.c 
b/source/blender/blenkernel/intern/library_remap.c
index dc4621e..850ff98 100644
--- a/source/blender/blenkernel/intern/library_remap.c
+++ b/source/blender/blenkernel/intern/library_remap.c
@@ -266,7 +266,7 @@ static void libblock_remap_data_preprocess(IDRemap 
*r_id_remap_data)
                                /* In case we are unlinking... */
                                if (!r_id_remap_data->old_id) {
                                        /* ... everything from scene. */
-                                       BKE_BASES_ITER_START(sce)
+                                       BKE_BASES_ITER_START(sce, base)
                                        {
                                                
libblock_remap_data_preprocess_scene_base_unlink(
                                                            r_id_remap_data, 
sce, base, skip_indirect, is_indirect);
@@ -336,7 +336,7 @@ static void 
libblock_remap_data_postprocess_group_scene_unlink(Main *UNUSED(bmai
 {
        /* Note that here we assume no object has no base (i.e. all objects are 
assumed instanced
         * in one scene...). */
-       BKE_BASES_ITER_START(sce)
+       BKE_BASES_ITER_START(sce, base)
        {
                if (base->flag & OB_FROMGROUP) {
                        Object *ob = base->object;
diff --git a/source/blender/blenkernel/intern/object.c 
b/source/blender/blenkernel/intern/object.c
index afb3f6f..466f23b 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -154,7 +154,7 @@ void BKE_object_workob_clear(Object *workob)
 
 void 

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to