Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenkernel/BKE_depsgraph.h2
-rw-r--r--source/blender/blenkernel/intern/depsgraph.c26
-rw-r--r--source/blender/blenkernel/intern/scene.c4
3 files changed, 19 insertions, 13 deletions
diff --git a/source/blender/blenkernel/BKE_depsgraph.h b/source/blender/blenkernel/BKE_depsgraph.h
index df7e9561c46..bfd01545f86 100644
--- a/source/blender/blenkernel/BKE_depsgraph.h
+++ b/source/blender/blenkernel/BKE_depsgraph.h
@@ -128,7 +128,7 @@ int DAG_id_type_tagged(struct Main *bmain, short idtype);
void DAG_scene_flush_update(struct Main *bmain, struct Scene *sce, unsigned int lay, const short do_time);
void DAG_ids_flush_tagged(struct Main *bmain);
void DAG_ids_check_recalc(struct Main *bmain, struct Scene *scene, int time);
-void DAG_ids_clear_recalc(struct Main *bmain);
+void DAG_ids_clear_recalc(struct Main *bmain, struct Scene *scene);
/* Armature: sorts the bones according to dependencies between them */
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c
index 1c36cccf1e6..b9c9572d599 100644
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ b/source/blender/blenkernel/intern/depsgraph.c
@@ -2471,7 +2471,7 @@ void DAG_ids_check_recalc(Main *bmain, Scene *scene, int time)
#define POST_UPDATE_HANDLER_WORKAROUND
-void DAG_ids_clear_recalc(Main *bmain)
+void DAG_ids_clear_recalc(Main *bmain, Scene *scene)
{
ListBase *lbarray[MAX_LIBARRAY];
bNodeTree *ntree;
@@ -2479,6 +2479,21 @@ void DAG_ids_clear_recalc(Main *bmain)
#ifdef POST_UPDATE_HANDLER_WORKAROUND
bool have_updated_objects = false;
+
+ if (DAG_id_type_tagged(bmain, ID_OB)) {
+ DagNode *node;
+ for (node = scene->theDag->DagNode.first; node; node = node->next) {
+ if (node->type == ID_OB) {
+ Object *object = (Object *) node->ob;
+ if (object->recalc & OB_RECALC_ALL) {
+ have_updated_objects = true;
+ break;
+ }
+ }
+ }
+ }
+#else
+ (void) scene; /* Unused. */
#endif
/* loop over all ID types */
@@ -2495,15 +2510,6 @@ void DAG_ids_clear_recalc(Main *bmain)
if (id->flag & (LIB_ID_RECALC | LIB_ID_RECALC_DATA))
id->flag &= ~(LIB_ID_RECALC | LIB_ID_RECALC_DATA);
-#ifdef POST_UPDATE_HANDLER_WORKAROUND
- if (GS(id->name) == ID_OB) {
- Object *object = (Object *) id;
- if (object->recalc & OB_RECALC_ALL) {
- have_updated_objects = true;
- }
- }
-#endif
-
/* some ID's contain semi-datablock nodetree */
ntree = ntreeFromID(id);
if (ntree && (ntree->id.flag & (LIB_ID_RECALC | LIB_ID_RECALC_DATA)))
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index c6a2dfb4482..8b3866076be 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1563,7 +1563,7 @@ void BKE_scene_update_tagged(EvaluationContext *eval_ctx, Main *bmain, Scene *sc
DAG_ids_check_recalc(bmain, scene, FALSE);
/* clear recalc flags */
- DAG_ids_clear_recalc(bmain);
+ DAG_ids_clear_recalc(bmain, scene);
}
/* applies changes right away, does all sets too */
@@ -1639,7 +1639,7 @@ void BKE_scene_update_for_newframe(EvaluationContext *eval_ctx, Main *bmain, Sce
DAG_ids_check_recalc(bmain, sce, TRUE);
/* clear recalc flags */
- DAG_ids_clear_recalc(bmain);
+ DAG_ids_clear_recalc(bmain, sce);
#ifdef DETAILED_ANALYSIS_OUTPUT
fprintf(stderr, "frame update start_time %f duration %f\n", start_time, PIL_check_seconds_timer() - start_time);