Depsgraph/Python: callbacks and properties to detect datablock changes
[blender.git] / source / blender / blenkernel / intern / scene.c
index c902bee80a8c37f47ef8768b02f6b23a6811848f..b25120c0fffdb2bdab4aa61ffa654c16121a6718 100644 (file)
@@ -992,6 +992,8 @@ void scene_update_tagged(Main *bmain, Scene *scene)
 {
        DAG_ids_flush_tagged(bmain);
 
+       BLI_exec_cb(bmain, &scene->id, BLI_CB_EVT_SCENE_UPDATE_PRE);
+
        scene->physics_settings.quick_cache_step= 0;
 
        /* update all objects: drivers, matrices, displists, etc. flags set
@@ -1011,10 +1013,19 @@ void scene_update_tagged(Main *bmain, Scene *scene)
        if (scene->physics_settings.quick_cache_step)
                BKE_ptcache_quick_cache_all(bmain, scene);
 
+       DAG_ids_check_recalc(bmain);
+
+       BLI_exec_cb(bmain, &scene->id, BLI_CB_EVT_SCENE_UPDATE_POST);
+
        /* in the future this should handle updates for all datablocks, not
           only objects and scenes. - brecht */
 }
 
+void scene_clear_tagged(Main *bmain, Scene *UNUSED(scene))
+{
+       DAG_ids_clear_recalc(bmain);
+}
+
 /* applies changes right away, does all sets too */
 void scene_update_for_newframe(Main *bmain, Scene *sce, unsigned int lay)
 {
@@ -1039,6 +1050,8 @@ void scene_update_for_newframe(Main *bmain, Scene *sce, unsigned int lay)
         * so dont call within 'scene_update_tagged_recursive' */
        DAG_scene_update_flags(bmain, sce, lay, TRUE);   // only stuff that moves or needs display still
 
+       BLI_exec_cb(bmain, (ID *)sce, BLI_CB_EVT_SCENE_UPDATE_PRE);
+
        /* All 'standard' (i.e. without any dependencies) animation is handled here,
         * with an 'local' to 'macro' order of evaluation. This should ensure that
         * settings stored nestled within a hierarchy (i.e. settings in a Texture block
@@ -1052,6 +1065,7 @@ void scene_update_for_newframe(Main *bmain, Scene *sce, unsigned int lay)
        scene_update_tagged_recursive(bmain, sce, sce);
 
        /* keep this last */
+       BLI_exec_cb(bmain, (ID *)sce, BLI_CB_EVT_SCENE_UPDATE_POST);
        BLI_exec_cb(bmain, (ID *)sce, BLI_CB_EVT_FRAME_CHANGE_POST);
 }