From 55cacb2e63e342705e25e205c1b805956a7226bd Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 29 Aug 2014 16:17:31 +1000 Subject: Add callback for starting a render-job We had complete/cancel, but no matching init for rendering, render_pre/post callbacks aren't always usable. --- source/blender/blenlib/BLI_callbacks.h | 8 ++++++++ source/blender/python/intern/bpy_app_handlers.c | 1 + source/blender/render/intern/source/pipeline.c | 4 ++++ 3 files changed, 13 insertions(+) (limited to 'source') diff --git a/source/blender/blenlib/BLI_callbacks.h b/source/blender/blenlib/BLI_callbacks.h index b93cd9e9eeb..2f963cfac51 100644 --- a/source/blender/blenlib/BLI_callbacks.h +++ b/source/blender/blenlib/BLI_callbacks.h @@ -29,12 +29,20 @@ struct bContext; struct Main; struct ID; +/** + * Common suffix uses: + * - ``_PRE/_POST``: + * For handling discrete non-interactive events. + * - ``_INIT/_COMPLETE/_CANCEL``: + * For handling jobs (which may in turn cause other handlers to be called). + */ typedef enum { BLI_CB_EVT_FRAME_CHANGE_PRE, BLI_CB_EVT_FRAME_CHANGE_POST, BLI_CB_EVT_RENDER_PRE, BLI_CB_EVT_RENDER_POST, BLI_CB_EVT_RENDER_STATS, + BLI_CB_EVT_RENDER_INIT, BLI_CB_EVT_RENDER_COMPLETE, BLI_CB_EVT_RENDER_CANCEL, BLI_CB_EVT_LOAD_PRE, diff --git a/source/blender/python/intern/bpy_app_handlers.c b/source/blender/python/intern/bpy_app_handlers.c index c1d0a0bc298..41ca2d49ed6 100644 --- a/source/blender/python/intern/bpy_app_handlers.c +++ b/source/blender/python/intern/bpy_app_handlers.c @@ -49,6 +49,7 @@ static PyStructSequence_Field app_cb_info_fields[] = { {(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)"}, diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 333f0b726d5..1b7ce9a3f2d 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -2779,6 +2779,8 @@ void RE_SetReports(Render *re, ReportList *reports) void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *srl, Object *camera_override, unsigned int lay_override, int frame, const bool write_still) { + BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_INIT); + /* ugly global still... is to prevent preview events and signal subsurfs etc to make full resol */ G.is_rendering = true; @@ -2953,6 +2955,8 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri int cfrao = scene->r.cfra; int nfra, totrendered = 0, totskipped = 0; + BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_INIT); + /* do not fully call for each frame, it initializes & pops output window */ if (!render_initialize_from_main(re, &rd, bmain, scene, NULL, camera_override, lay_override, 0, 1)) return; -- cgit v1.2.3