Commit: ecbae4ab466e9d50b11fd434caf29ea1781fa7d6
Author: Lukas Tönne
Date:   Wed Feb 26 14:36:30 2014 +0100
https://developer.blender.org/rBecbae4ab466e9d50b11fd434caf29ea1781fa7d6

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).

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

M       source/blender/editors/render/render_internal.c
M       source/blender/render/extern/include/RE_pipeline.h
M       source/blender/render/intern/source/pipeline.c

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

diff --git a/source/blender/editors/render/render_internal.c 
b/source/blender/editors/render/render_internal.c
index e57474a..c922389 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -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");
diff --git a/source/blender/render/extern/include/RE_pipeline.h 
b/source/blender/render/extern/include/RE_pipeline.h
index 7251ba7..ae0b6f1 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -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);
 
diff --git a/source/blender/render/intern/source/pipeline.c 
b/source/blender/render/intern/source/pipeline.c
index 001386b..b6f19d6 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to