[Bf-blender-cvs] [4b06d0bf51c] blender2.8: Python API: bpy.app.handlers.depsgraph_update_pre/post

Jacques Lucke noreply at git.blender.org
Fri Nov 23 11:56:18 CET 2018


Commit: 4b06d0bf51c38c4358c07823358589ca1cdc6f47
Author: Jacques Lucke
Date:   Fri Nov 23 11:51:42 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB4b06d0bf51c38c4358c07823358589ca1cdc6f47

Python API: bpy.app.handlers.depsgraph_update_pre/post

Reviewers: brecht

Differential Revision: https://developer.blender.org/D3978

===================================================================

M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenlib/BLI_callbacks.h
M	source/blender/python/intern/bpy_app_handlers.c

===================================================================

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



More information about the Bf-blender-cvs mailing list