diff options
author | Lukas Tönne <lukas.toenne@gmail.com> | 2014-02-26 17:56:27 +0400 |
---|---|---|
committer | Lukas Tönne <lukas.toenne@gmail.com> | 2014-02-26 17:56:27 +0400 |
commit | 4cfca0adfeeadccf0013aaeb8b34315b2d2a8e33 (patch) | |
tree | ebdcdf3247b8d5280f3a376ae92113962a1e1971 /source | |
parent | ecbae4ab466e9d50b11fd434caf29ea1781fa7d6 (diff) |
Nicer solution to T38846: Split off the render layer forcing from the
validity check for render operator.
This way scene DNA can stay read-only there, cleaner and we don't have
to pass an awkward bool pointer around.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/render/render_internal.c | 8 | ||||
-rw-r--r-- | source/blender/render/extern/include/RE_pipeline.h | 3 | ||||
-rw-r--r-- | source/blender/render/intern/source/pipeline.c | 28 |
3 files changed, 22 insertions, 17 deletions
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index c922389f3cc..a842135ce72 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -799,17 +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, &scene_rlayer_update)) { + if (RE_force_single_renderlayer(scene)) + WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, NULL); + + if (!RE_is_rendering_allowed(scene, camera_override, op->reports)) { 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 ae0b6f1e2a8..8cb49f68243 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -285,7 +285,8 @@ 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 *r_scene_rlayer_update); +bool RE_force_single_renderlayer(struct Scene *scene); +bool RE_is_rendering_allowed(struct Scene *scene, struct Object *camera_override, struct ReportList *reports); 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 b6f19d6c25c..adb8100517d 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -2314,6 +2314,20 @@ static void do_render_all_options(Render *re) } } +bool RE_force_single_renderlayer(Scene *scene) +{ + int scemode = check_mode_full_sample(&scene->r); + if (scemode & R_SINGLE_LAYER) { + SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay); + /* force layer to be enabled */ + if (srl->layflag & SCE_LAY_DISABLE) { + srl->layflag &= ~SCE_LAY_DISABLE; + return true; + } + } + return false; +} + static bool check_valid_compositing_camera(Scene *scene, Object *camera_override) { if (scene->r.scemode & R_DOCOMP && scene->use_nodes) { @@ -2400,12 +2414,10 @@ 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 *r_scene_rlayer_update) +bool RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *reports) { 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 || @@ -2477,16 +2489,8 @@ bool RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList * } #endif } - - /* layer flag tests */ - if (scemode & R_SINGLE_LAYER) { - 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; - } + /* layer flag tests */ for (srl = scene->r.layers.first; srl; srl = srl->next) if (!(srl->layflag & SCE_LAY_DISABLE)) break; |