From 469979f9cb08640fbc00a43b59eee459460e74e1 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 12 May 2013 13:33:20 +0000 Subject: Fix material/lamp drivers not working sometimes when they were used by multiple objects, found while looking into another bug. --- source/blender/blenkernel/intern/depsgraph.c | 12 ++++++++---- source/blender/blenkernel/intern/lamp.c | 6 ++++-- source/blender/blenkernel/intern/material.c | 6 ++++-- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index 1bae4ec68cc..86832a72b90 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -372,8 +372,8 @@ static void dag_add_material_driver_relations(DagForest *dag, DagNode *node, Mat */ if (ma->id.flag & LIB_DOIT) return; - else - ma->id.flag |= LIB_DOIT; + + ma->id.flag |= LIB_DOIT; /* material itself */ if (ma->adt) @@ -386,6 +386,8 @@ static void dag_add_material_driver_relations(DagForest *dag, DagNode *node, Mat /* material's nodetree */ if (ma->nodetree) dag_add_shader_nodetree_driver_relations(dag, node, ma->nodetree); + + ma->id.flag &= ~LIB_DOIT; } /* recursive handling for lamp drivers */ @@ -397,8 +399,8 @@ static void dag_add_lamp_driver_relations(DagForest *dag, DagNode *node, Lamp *l */ if (la->id.flag & LIB_DOIT) return; - else - la->id.flag |= LIB_DOIT; + + la->id.flag |= LIB_DOIT; /* lamp itself */ if (la->adt) @@ -411,6 +413,8 @@ static void dag_add_lamp_driver_relations(DagForest *dag, DagNode *node, Lamp *l /* lamp's nodetree */ if (la->nodetree) dag_add_shader_nodetree_driver_relations(dag, node, la->nodetree); + + la->id.flag &= ~LIB_DOIT; } static void dag_add_collision_field_relation(DagForest *dag, Scene *scene, Object *ob, DagNode *node, int skip_forcefield, bool no_collision) diff --git a/source/blender/blenkernel/intern/lamp.c b/source/blender/blenkernel/intern/lamp.c index 32cc5c6c22e..903b032e080 100644 --- a/source/blender/blenkernel/intern/lamp.c +++ b/source/blender/blenkernel/intern/lamp.c @@ -258,8 +258,8 @@ void lamp_drivers_update(Scene *scene, Lamp *la, float ctime) * in the meantime... [#32017] */ if (la->id.flag & LIB_DOIT) return; - else - la->id.flag |= LIB_DOIT; + + la->id.flag |= LIB_DOIT; /* lamp itself */ if (la->adt && la->adt->drivers.first) @@ -268,5 +268,7 @@ void lamp_drivers_update(Scene *scene, Lamp *la, float ctime) /* nodes */ if (la->nodetree) lamp_node_drivers_update(scene, la->nodetree, ctime); + + la->id.flag &= ~LIB_DOIT; } diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index 7e70b9d9cd5..2b7a41933b4 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -1133,8 +1133,8 @@ void material_drivers_update(Scene *scene, Material *ma, float ctime) */ if (ma->id.flag & LIB_DOIT) return; - else - ma->id.flag |= LIB_DOIT; + + ma->id.flag |= LIB_DOIT; /* material itself */ if (ma->adt && ma->adt->drivers.first) { @@ -1145,6 +1145,8 @@ void material_drivers_update(Scene *scene, Material *ma, float ctime) if (ma->nodetree) { material_node_drivers_update(scene, ma->nodetree, ctime); } + + ma->id.flag &= ~LIB_DOIT; } /* ****************** */ -- cgit v1.2.3