diff options
author | Jacques Lucke <mail@jlucke.com> | 2018-11-23 13:51:42 +0300 |
---|---|---|
committer | Jacques Lucke <mail@jlucke.com> | 2018-11-23 13:52:09 +0300 |
commit | 4b06d0bf51c38c4358c07823358589ca1cdc6f47 (patch) | |
tree | 45f1b53cbd136385e2baec687dc1f4c699072601 /source/blender | |
parent | 2ded8fca7941a7092b80dc66d423056b1483afef (diff) |
Python API: bpy.app.handlers.depsgraph_update_pre/post
Reviewers: brecht
Differential Revision: https://developer.blender.org/D3978
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 10 | ||||
-rw-r--r-- | source/blender/blenlib/BLI_callbacks.h | 2 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_app_handlers.c | 38 |
3 files changed, 32 insertions, 18 deletions
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 5213afc3805..73b800076d1 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -1412,6 +1412,11 @@ void BKE_scene_graph_update_tagged(Depsgraph *depsgraph, Scene *scene = DEG_get_input_scene(depsgraph); ViewLayer *view_layer = DEG_get_input_view_layer(depsgraph); + bool run_callbacks = DEG_id_type_any_updated(depsgraph); + if (run_callbacks) { + BLI_callback_exec(bmain, &scene->id, BLI_CB_EVT_DEPSGRAPH_UPDATE_PRE); + } + /* TODO(sergey): Some functions here are changing global state, * for example, clearing update tags from bmain. */ @@ -1429,6 +1434,11 @@ void BKE_scene_graph_update_tagged(Depsgraph *depsgraph, DEG_evaluate_on_refresh(depsgraph); /* Update sound system animation (TODO, move to depsgraph). */ BKE_sound_update_scene(bmain, scene); + + /* Notify python about depsgraph update */ + if (run_callbacks) { + BLI_callback_exec(bmain, &scene->id, BLI_CB_EVT_DEPSGRAPH_UPDATE_POST); + } /* Inform editors about possible changes. */ DEG_ids_check_recalc(bmain, depsgraph, scene, view_layer, false); /* Clear recalc flags. */ diff --git a/source/blender/blenlib/BLI_callbacks.h b/source/blender/blenlib/BLI_callbacks.h index f53a4b385b4..c888152001e 100644 --- a/source/blender/blenlib/BLI_callbacks.h +++ b/source/blender/blenlib/BLI_callbacks.h @@ -53,6 +53,8 @@ typedef enum { BLI_CB_EVT_UNDO_POST, BLI_CB_EVT_REDO_PRE, BLI_CB_EVT_REDO_POST, + BLI_CB_EVT_DEPSGRAPH_UPDATE_PRE, + BLI_CB_EVT_DEPSGRAPH_UPDATE_POST, BLI_CB_EVT_VERSION_UPDATE, BLI_CB_EVT_TOT } eCbEvent; diff --git a/source/blender/python/intern/bpy_app_handlers.c b/source/blender/python/intern/bpy_app_handlers.c index e71fd80b63b..44647eb21a0 100644 --- a/source/blender/python/intern/bpy_app_handlers.c +++ b/source/blender/python/intern/bpy_app_handlers.c @@ -46,24 +46,26 @@ void bpy_app_generic_callback(struct Main *main, struct ID *id, void *arg); static PyTypeObject BlenderAppCbType; static PyStructSequence_Field app_cb_info_fields[] = { - {(char *)"frame_change_pre", (char *)"on frame change for playback and rendering (before)"}, - {(char *)"frame_change_post", (char *)"on frame change for playback and rendering (after)"}, - {(char *)"render_pre", (char *)"on render (before)"}, - {(char *)"render_post", (char *)"on render (after)"}, - {(char *)"render_write", (char *)"on writing a render frame (directly after the frame is written)"}, - {(char *)"render_stats", (char *)"on printing render statistics"}, - {(char *)"render_init", (char *)"on initialization of a render job"}, - {(char *)"render_complete", (char *)"on completion of render job"}, - {(char *)"render_cancel", (char *)"on canceling a render job"}, - {(char *)"load_pre", (char *)"on loading a new blend file (before)"}, - {(char *)"load_post", (char *)"on loading a new blend file (after)"}, - {(char *)"save_pre", (char *)"on saving a blend file (before)"}, - {(char *)"save_post", (char *)"on saving a blend file (after)"}, - {(char *)"undo_pre", (char *)"on loading an undo step (before)"}, - {(char *)"undo_post", (char *)"on loading an undo step (after)"}, - {(char *)"redo_pre", (char *)"on loading a redo step (before)"}, - {(char *)"redo_post", (char *)"on loading a redo step (after)"}, - {(char *)"version_update", (char *)"on ending the versioning code"}, + {(char *)"frame_change_pre", (char *)"on frame change for playback and rendering (before)"}, + {(char *)"frame_change_post", (char *)"on frame change for playback and rendering (after)"}, + {(char *)"render_pre", (char *)"on render (before)"}, + {(char *)"render_post", (char *)"on render (after)"}, + {(char *)"render_write", (char *)"on writing a render frame (directly after the frame is written)"}, + {(char *)"render_stats", (char *)"on printing render statistics"}, + {(char *)"render_init", (char *)"on initialization of a render job"}, + {(char *)"render_complete", (char *)"on completion of render job"}, + {(char *)"render_cancel", (char *)"on canceling a render job"}, + {(char *)"load_pre", (char *)"on loading a new blend file (before)"}, + {(char *)"load_post", (char *)"on loading a new blend file (after)"}, + {(char *)"save_pre", (char *)"on saving a blend file (before)"}, + {(char *)"save_post", (char *)"on saving a blend file (after)"}, + {(char *)"undo_pre", (char *)"on loading an undo step (before)"}, + {(char *)"undo_post", (char *)"on loading an undo step (after)"}, + {(char *)"redo_pre", (char *)"on loading a redo step (before)"}, + {(char *)"redo_post", (char *)"on loading a redo step (after)"}, + {(char *)"depsgraph_update_pre", (char *)"on depsgraph update (pre)"}, + {(char *)"depsgraph_update_post", (char *)"on depsgraph update (post)"}, + {(char *)"version_update", (char *)"on ending the versioning code"}, /* sets the permanent tag */ # define APP_CB_OTHER_FIELDS 1 |