From 07b07e53ea0831ffb0c2a3aff0a33b40aa935c5c Mon Sep 17 00:00:00 2001 From: Cheryl Chen Date: Thu, 15 Mar 2018 23:36:15 +0100 Subject: Fix T53971: single layer render showing the wrong render layer in image editor. Original patch Cheryl Chen, extra fixes by Brecht. Differential Revision: https://developer.blender.org/D3098 --- source/blender/editors/render/render_internal.c | 22 +++++++++++++++----- source/blender/render/extern/include/RE_pipeline.h | 2 ++ source/blender/render/intern/source/pipeline.c | 24 ++++++++++++++++------ 3 files changed, 37 insertions(+), 11 deletions(-) (limited to 'source/blender') diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index 58b4c0fe222..c27570aabc5 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -521,10 +521,8 @@ static void render_image_update_pass_and_layer(RenderJob *rj, RenderResult *rr, int layer = BLI_findstringindex(&main_rr->layers, (char *)rr->renlay->name, offsetof(RenderLayer, name)); - if (layer != rj->last_layer) { - sima->iuser.layer = layer; - rj->last_layer = layer; - } + sima->iuser.layer = layer; + rj->last_layer = layer; } iuser->pass = sima->iuser.pass; @@ -621,7 +619,21 @@ static void render_image_restore_layer(RenderJob *rj) if (sa == rj->sa) { if (sa->spacetype == SPACE_IMAGE) { SpaceImage *sima = sa->spacedata.first; - sima->iuser.layer = rj->orig_layer; + + if (RE_HasSingleLayer(rj->re)) { + /* For single layer renders keep the active layer + * visible, or show the compositing result. */ + RenderResult *rr = RE_AcquireResultRead(rj->re); + if(RE_HasCombinedLayer(rr)) { + sima->iuser.layer = 0; + } + RE_ReleaseResult(rj->re); + } + else { + /* For multiple layer render, set back the layer + * that was set at the start of rendering. */ + sima->iuser.layer = rj->orig_layer; + } } return; } diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index bb056675887..de71b8d1023 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -236,6 +236,8 @@ void RE_render_result_rect_from_ibuf( struct RenderLayer *RE_GetRenderLayer(struct RenderResult *rr, const char *name); float *RE_RenderLayerGetPass(volatile struct RenderLayer *rl, const char *name, const char *viewname); +bool RE_HasSingleLayer(struct Render *re); + /* add passes for grease pencil */ struct RenderPass *RE_create_gp_pass(struct RenderResult *rr, const char *layername, const char *viewname); diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 7cab5f43aca..e17a503cd4e 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -257,6 +257,11 @@ RenderLayer *RE_GetRenderLayer(RenderResult *rr, const char *name) } } +bool RE_HasSingleLayer(Render *re) +{ + return (re->r.scemode & R_SINGLE_LAYER); +} + RenderResult *RE_MultilayerConvert(void *exrhandle, const char *colorspace, bool predivide, int rectx, int recty) { return render_result_new_from_exr(exrhandle, colorspace, predivide, rectx, recty); @@ -264,12 +269,19 @@ RenderResult *RE_MultilayerConvert(void *exrhandle, const char *colorspace, bool RenderLayer *render_get_active_layer(Render *re, RenderResult *rr) { - RenderLayer *rl = BLI_findlink(&rr->layers, re->r.actlay); - - if (rl) - return rl; - else - return rr->layers.first; + SceneRenderLayer *srl = BLI_findlink(&re->r.layers, re->r.actlay); + + if (srl) { + RenderLayer *rl = BLI_findstring(&rr->layers, + srl->name, + offsetof(RenderLayer, name)); + + if (rl) { + return rl; + } + } + + return rr->layers.first; } static int render_scene_needs_vector(Render *re) -- cgit v1.2.3 From e5327afcb73f102db8a82ccefc29bbf9cc6fb60c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dietrich?= Date: Fri, 16 Mar 2018 04:06:18 +0100 Subject: Fix T54326: Import Alembic stuck in edit mode Switch to object mode before doing the import. --- source/blender/editors/io/io_alembic.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'source/blender') diff --git a/source/blender/editors/io/io_alembic.c b/source/blender/editors/io/io_alembic.c index ca4ab30a08d..08181af2ef3 100644 --- a/source/blender/editors/io/io_alembic.c +++ b/source/blender/editors/io/io_alembic.c @@ -59,6 +59,8 @@ #include "RNA_define.h" #include "RNA_enum_types.h" +#include "ED_object.h" + #include "UI_interface.h" #include "UI_resources.h" @@ -543,6 +545,22 @@ static int wm_alembic_import_exec(bContext *C, wmOperator *op) } } + /* Switch to object mode to avoid being stuck in other modes (T54326). */ + if (CTX_data_mode_enum(C) != CTX_MODE_OBJECT) { + Object *obedit = CTX_data_edit_object(C); + + if (obedit != NULL) { + ED_object_mode_toggle(C, obedit->mode); + } + else { + Object *ob = CTX_data_active_object(C); + + if (ob) { + ED_object_mode_toggle(C, ob->mode); + } + } + } + bool ok = ABC_import(C, filename, scale, is_sequence, set_frame_range, sequence_len, offset, validate_meshes, as_background_job); -- cgit v1.2.3