diff options
author | Ton Roosendaal <ton@blender.org> | 2009-01-04 17:14:06 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2009-01-04 17:14:06 +0300 |
commit | f7cb86df3a9ceccc4d649e42735732a608169157 (patch) | |
tree | 558a9ba43708a2213b1afa8f46d79f5daa140bc6 /source/blender/blenkernel/intern/depsgraph.c | |
parent | 74f9e98c828c17910405092785633373d4ae88e8 (diff) |
2.5
Think global, act local!
The old favorite G.scene gone! Man... that took almost 2 days.
Also removed G.curscreen and G.edbo.
Not everything could get solved; here's some notes.
- modifiers now store current scene in ModifierData. This is not
meant for permanent, but it can probably stick there until we
cleaned the anim system and depsgraph to cope better with
timing issues.
- Game engine G.scene should become an argument for staring it.
Didn't solve this yet.
- Texture nodes should get scene cfra, but the current implementation
is too tightly wrapped to do it easily.
Diffstat (limited to 'source/blender/blenkernel/intern/depsgraph.c')
-rw-r--r-- | source/blender/blenkernel/intern/depsgraph.c | 42 |
1 files changed, 13 insertions, 29 deletions
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index e090a2e4cae..01dd6c0c657 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -349,14 +349,14 @@ static void dag_add_driver_relation(Ipo *ipo, DagForest *dag, DagNode *node, int } } -static void dag_add_collision_field_relation(DagForest *dag, Object *ob, DagNode *node) +static void dag_add_collision_field_relation(DagForest *dag, Scene *scene, Object *ob, DagNode *node) { Base *base; DagNode *node2; // would be nice to have a list of colliders here // so for now walk all objects in scene check 'same layer rule' - for(base = G.scene->base.first; base; base= base->next) { + for(base = scene->base.first; base; base= base->next) { if((base->lay & ob->lay) && base->object->pd) { Object *ob1= base->object; if((ob1->pd->deflect || ob1->pd->forcefield) && (ob1 != ob)) { @@ -367,7 +367,7 @@ static void dag_add_collision_field_relation(DagForest *dag, Object *ob, DagNode } } -static void build_dag_object(DagForest *dag, DagNode *scenenode, Object *ob, int mask) +static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, Object *ob, int mask) { bConstraint *con; bConstraintChannel *conchan; @@ -471,7 +471,7 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Object *ob, int for(md=ob->modifiers.first; md; md=md->next) { ModifierTypeInfo *mti = modifierType_getInfo(md->type); - if (mti->updateDepgraph) mti->updateDepgraph(md, dag, ob, node); + if (mti->updateDepgraph) mti->updateDepgraph(md, dag, scene, ob, node); } } if (ob->parent) { @@ -546,10 +546,10 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Object *ob, int /* softbody collision */ if((ob->type==OB_MESH) || (ob->type==OB_CURVE) || (ob->type==OB_LATTICE)) if(modifiers_isSoftbodyEnabled(ob) || modifiers_isClothEnabled(ob)) - dag_add_collision_field_relation(dag, ob, node); + dag_add_collision_field_relation(dag, scene, ob, node); if (ob->type==OB_MBALL) { - Object *mom= find_basis_mball(ob); + Object *mom= find_basis_mball(scene, ob); if(mom!=ob) { node2 = dag_get_node(dag, mom); dag_add_relation(dag,node,node2,DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Metaball"); // mom depends on children! @@ -612,7 +612,7 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Object *ob, int if(psys->effectors.first) psys_end_effectors(psys); - psys_init_effectors(ob,psys->part->eff_group,psys); + psys_init_effectors(scene, ob, psys->part->eff_group, psys); if(psys->effectors.first) { for(nec= psys->effectors.first; nec; nec= nec->next) { @@ -707,9 +707,9 @@ struct DagForest *build_dag(struct Scene *sce, short mask) for(base = sce->base.first; base; base= base->next) { ob= base->object; - build_dag_object(dag, scenenode, ob, mask); + build_dag_object(dag, scenenode, sce, ob, mask); if(ob->proxy) - build_dag_object(dag, scenenode, ob->proxy, mask); + build_dag_object(dag, scenenode, sce, ob->proxy, mask); /* handled in next loop */ if(ob->dup_group) @@ -720,7 +720,7 @@ struct DagForest *build_dag(struct Scene *sce, short mask) for(group= G.main->group.first; group; group= group->id.next) { if(group->id.flag & LIB_DOIT) { for(go= group->gobject.first; go; go= go->next) { - build_dag_object(dag, scenenode, go->ob, mask); + build_dag_object(dag, scenenode, sce, go->ob, mask); } group->id.flag &= ~LIB_DOIT; } @@ -2137,22 +2137,6 @@ void DAG_scene_update_flags(Scene *scene, unsigned int lay) } -/* for depgraph updating, all layers visible in a screen */ -/* this is a copy from editscreen.c... I need to think over a more proper solution for this */ -/* probably the DAG_object_flush_update() should give layer too? */ -/* or some kind of dag context... (DAG_set_layer) */ -static unsigned int dag_screen_view3d_layers(void) -{ - ScrArea *sa; - int layer= 0; - - for(sa= G.curscreen->areabase.first; sa; sa= sa->next) { - if(sa->spacetype==SPACE_VIEW3D) - layer |= ((View3D *)sa->spacedata.first)->lay; - } - return layer; -} - /* flag this object and all its relations to recalc */ /* if you need to do more objects, tag object yourself and @@ -2186,9 +2170,9 @@ void DAG_object_flush_update(Scene *sce, Object *ob, short flag) } } - if(G.curscreen) - DAG_scene_flush_update(sce, dag_screen_view3d_layers(), 0); - else +// XXX if(G.curscreen) +// DAG_scene_flush_update(sce, dag_screen_view3d_layers(), 0); +// else DAG_scene_flush_update(sce, sce->lay, 0); } |