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.
This commit is contained in:
@@ -29,12 +29,20 @@ struct bContext;
|
|||||||
struct Main;
|
struct Main;
|
||||||
struct ID;
|
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 {
|
typedef enum {
|
||||||
BLI_CB_EVT_FRAME_CHANGE_PRE,
|
BLI_CB_EVT_FRAME_CHANGE_PRE,
|
||||||
BLI_CB_EVT_FRAME_CHANGE_POST,
|
BLI_CB_EVT_FRAME_CHANGE_POST,
|
||||||
BLI_CB_EVT_RENDER_PRE,
|
BLI_CB_EVT_RENDER_PRE,
|
||||||
BLI_CB_EVT_RENDER_POST,
|
BLI_CB_EVT_RENDER_POST,
|
||||||
BLI_CB_EVT_RENDER_STATS,
|
BLI_CB_EVT_RENDER_STATS,
|
||||||
|
BLI_CB_EVT_RENDER_INIT,
|
||||||
BLI_CB_EVT_RENDER_COMPLETE,
|
BLI_CB_EVT_RENDER_COMPLETE,
|
||||||
BLI_CB_EVT_RENDER_CANCEL,
|
BLI_CB_EVT_RENDER_CANCEL,
|
||||||
BLI_CB_EVT_LOAD_PRE,
|
BLI_CB_EVT_LOAD_PRE,
|
||||||
|
@@ -49,6 +49,7 @@ static PyStructSequence_Field app_cb_info_fields[] = {
|
|||||||
{(char *)"render_pre", (char *)"Callback list - on render (before)"},
|
{(char *)"render_pre", (char *)"Callback list - on render (before)"},
|
||||||
{(char *)"render_post", (char *)"Callback list - on render (after)"},
|
{(char *)"render_post", (char *)"Callback list - on render (after)"},
|
||||||
{(char *)"render_stats", (char *)"Callback list - on printing render statistics"},
|
{(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_complete", (char *)"Callback list - on completion of render job"},
|
||||||
{(char *)"render_cancel", (char *)"Callback list - on canceling a 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_pre", (char *)"Callback list - on loading a new blend file (before)"},
|
||||||
|
@@ -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,
|
void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *srl, Object *camera_override,
|
||||||
unsigned int lay_override, int frame, const bool write_still)
|
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 */
|
/* ugly global still... is to prevent preview events and signal subsurfs etc to make full resol */
|
||||||
G.is_rendering = true;
|
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 cfrao = scene->r.cfra;
|
||||||
int nfra, totrendered = 0, totskipped = 0;
|
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 */
|
/* 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))
|
if (!render_initialize_from_main(re, &rd, bmain, scene, NULL, camera_override, lay_override, 0, 1))
|
||||||
return;
|
return;
|
||||||
|
Reference in New Issue
Block a user