Fix T38846: Render layer checkbox is not refreshed.
The render operator invoke checks render layers, which can force the render layer to be activated. This requires a notifier, which has to be done in the operator itself (can't do this inside pipeline code).
This commit is contained in:
@@ -799,14 +799,17 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even
|
||||
struct Object *camera_override = v3d ? V3D_CAMERA_LOCAL(v3d) : NULL;
|
||||
const char *name;
|
||||
ScrArea *sa;
|
||||
bool scene_rlayer_update;
|
||||
|
||||
/* only one render job at a time */
|
||||
if (WM_jobs_test(CTX_wm_manager(C), scene, WM_JOB_TYPE_RENDER))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
if (!RE_is_rendering_allowed(scene, camera_override, op->reports)) {
|
||||
if (!RE_is_rendering_allowed(scene, camera_override, op->reports, &scene_rlayer_update)) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
if (scene_rlayer_update)
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
if (!is_animation && is_write_still && BKE_imtype_is_movie(scene->r.im_format.imtype)) {
|
||||
BKE_report(op->reports, RPT_ERROR, "Cannot write a single file with an animation format selected");
|
||||
|
||||
@@ -285,7 +285,7 @@ void RE_DataBase_GetView(struct Render *re, float mat[4][4]);
|
||||
void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, float mat[4][4]);
|
||||
struct Scene *RE_GetScene(struct Render *re);
|
||||
|
||||
bool RE_is_rendering_allowed(struct Scene *scene, struct Object *camera_override, struct ReportList *reports);
|
||||
bool RE_is_rendering_allowed(struct Scene *scene, struct Object *camera_override, struct ReportList *reports, bool *r_scene_rlayer_update);
|
||||
|
||||
bool RE_allow_render_generic_object(struct Object *ob);
|
||||
|
||||
|
||||
@@ -2400,10 +2400,12 @@ static int check_composite_output(Scene *scene)
|
||||
return node_tree_has_composite_output(scene->nodetree);
|
||||
}
|
||||
|
||||
bool RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *reports)
|
||||
bool RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *reports, bool *r_scene_rlayer_update)
|
||||
{
|
||||
SceneRenderLayer *srl;
|
||||
int scemode = check_mode_full_sample(&scene->r);
|
||||
if (r_scene_rlayer_update)
|
||||
*r_scene_rlayer_update = false; /* becomes true if render layer is forced enabled */
|
||||
|
||||
if (scene->r.mode & R_BORDER) {
|
||||
if (scene->r.border.xmax <= scene->r.border.xmin ||
|
||||
@@ -2481,6 +2483,8 @@ bool RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *
|
||||
srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
|
||||
/* force layer to be enabled */
|
||||
srl->layflag &= ~SCE_LAY_DISABLE;
|
||||
if (r_scene_rlayer_update)
|
||||
*r_scene_rlayer_update = true;
|
||||
}
|
||||
|
||||
for (srl = scene->r.layers.first; srl; srl = srl->next)
|
||||
|
||||
Reference in New Issue
Block a user