[Bf-blender-cvs] [ee01065] master: Python: add 'render_write' callback

Campbell Barton noreply at git.blender.org
Mon Dec 1 18:48:57 CET 2014


Commit: ee010650f61c759a1b5d3279bbdbbc5b8915152b
Author: Campbell Barton
Date:   Mon Dec 1 18:27:45 2014 +0100
Branches: master
https://developer.blender.org/rBee010650f61c759a1b5d3279bbdbbc5b8915152b

Python: add 'render_write' callback

This is useful for addons which intend to write data next to the rendered image/movie,
but not for preview renders.

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

M	source/blender/blenlib/BLI_callbacks.h
M	source/blender/python/intern/bpy_app_handlers.c
M	source/blender/render/intern/source/pipeline.c

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

diff --git a/source/blender/blenlib/BLI_callbacks.h b/source/blender/blenlib/BLI_callbacks.h
index 2f963cf..7cf5247 100644
--- a/source/blender/blenlib/BLI_callbacks.h
+++ b/source/blender/blenlib/BLI_callbacks.h
@@ -41,6 +41,7 @@ typedef enum {
 	BLI_CB_EVT_FRAME_CHANGE_POST,
 	BLI_CB_EVT_RENDER_PRE,
 	BLI_CB_EVT_RENDER_POST,
+	BLI_CB_EVT_RENDER_WRITE,
 	BLI_CB_EVT_RENDER_STATS,
 	BLI_CB_EVT_RENDER_INIT,
 	BLI_CB_EVT_RENDER_COMPLETE,
diff --git a/source/blender/python/intern/bpy_app_handlers.c b/source/blender/python/intern/bpy_app_handlers.c
index 44da322..cf20f6f 100644
--- a/source/blender/python/intern/bpy_app_handlers.c
+++ b/source/blender/python/intern/bpy_app_handlers.c
@@ -44,23 +44,24 @@ 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 *)"Callback list - on frame change for playback and rendering (before)"},
-	{(char *)"frame_change_post", (char *)"Callback list - on frame change for playback and rendering (after)"},
-	{(char *)"render_pre",        (char *)"Callback list - on render (before)"},
-	{(char *)"render_post",       (char *)"Callback list - on render (after)"},
-	{(char *)"render_stats",      (char *)"Callback list - on printing render statistics"},
-	{(char *)"render_init",       (char *)"Callback list - on initialization of a render job"},
-	{(char *)"render_complete",   (char *)"Callback list - on completion of render job"},
-	{(char *)"render_cancel",     (char *)"Callback list - on canceling a render job"},
-	{(char *)"load_pre",          (char *)"Callback list - on loading a new blend file (before)"},
-	{(char *)"load_post",         (char *)"Callback list - on loading a new blend file (after)"},
-	{(char *)"save_pre",          (char *)"Callback list - on saving a blend file (before)"},
-	{(char *)"save_post",         (char *)"Callback list - on saving a blend file (after)"},
-	{(char *)"scene_update_pre",  (char *)"Callback list - on updating the scenes data (before)"},
-	{(char *)"scene_update_post", (char *)"Callback list - on updating the scenes data (after)"},
-	{(char *)"game_pre",          (char *)"Callback list - on starting the game engine"},
-	{(char *)"game_post",         (char *)"Callback list - on ending the game engine"},
-	{(char *)"version_update",    (char *)"Callback list - 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 *)"scene_update_pre",  (char *)"on updating the scenes data (before)"},
+	{(char *)"scene_update_post", (char *)"on updating the scenes data (after)"},
+	{(char *)"game_pre",          (char *)"on starting the game engine"},
+	{(char *)"game_post",         (char *)"on ending the game engine"},
+	{(char *)"version_update",    (char *)"on ending the versioning code"},
 
 	/* sets the permanent tag */
 #   define APP_CB_OTHER_FIELDS 1
@@ -71,7 +72,7 @@ static PyStructSequence_Field app_cb_info_fields[] = {
 
 static PyStructSequence_Desc app_cb_info_desc = {
 	(char *)"bpy.app.handlers",     /* name */
-	(char *)"This module contains callbacks",    /* doc */
+	(char *)"This module contains callback lists",  /* doc */
 	app_cb_info_fields,    /* fields */
 	ARRAY_SIZE(app_cb_info_fields) - 1
 };
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index f0c1b5a..1f17b82 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -2834,6 +2834,9 @@ void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *sr
 		}
 
 		BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_POST); /* keep after file save */
+		if (write_still) {
+			BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_WRITE);
+		}
 	}
 
 	BLI_callback_exec(re->main, (ID *)scene, G.is_break ? BLI_CB_EVT_RENDER_CANCEL : BLI_CB_EVT_RENDER_COMPLETE);
@@ -3031,6 +3034,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
 
 				if (G.is_break == false) {
 					BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_POST); /* keep after file save */
+					BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_WRITE);
 				}
 			}
 			else {
@@ -3114,6 +3118,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
 
 			if (G.is_break == false) {
 				BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_POST); /* keep after file save */
+				BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_WRITE);
 			}
 		}
 	}




More information about the Bf-blender-cvs mailing list