Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2018-03-16 06:16:21 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-03-16 06:35:37 +0300
commit3692a2bcb3b8f742551c791c6e484e01678a0835 (patch)
treed9953d66c88c504aaf7967da9ecadf1eea2d2d6d /source
parentcca1e1b707c2d34244d3da87efcd78775c4eb048 (diff)
parente5327afcb73f102db8a82ccefc29bbf9cc6fb60c (diff)
Merge branch 'master' into blender2.8
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/io/io_alembic.c8
-rw-r--r--source/blender/editors/render/render_internal.c22
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h2
-rw-r--r--source/blender/render/intern/source/pipeline.c24
4 files changed, 45 insertions, 11 deletions
diff --git a/source/blender/editors/io/io_alembic.c b/source/blender/editors/io/io_alembic.c
index ca4ab30a08d..b584782e183 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,12 @@ static int wm_alembic_import_exec(bContext *C, wmOperator *op)
}
}
+ /* Switch out of edit mode to avoid being stuck in it (T54326). */
+ Object *obedit = CTX_data_edit_object(C);
+ if (obedit) {
+ ED_object_mode_toggle(C, OB_MODE_EDIT);
+ }
+
bool ok = ABC_import(C, filename, scale, is_sequence, set_frame_range,
sequence_len, offset, validate_meshes,
as_background_job);
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index aba4b7788f8..33ca6ea7495 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -536,10 +536,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;
@@ -637,7 +635,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 822993a2372..93ac53cdfcc 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -238,6 +238,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 33c633c76bc..170cd0ad419 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -261,6 +261,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);
@@ -268,12 +273,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->active_view_layer);
-
- if (rl)
- return rl;
- else
- return rr->layers.first;
+ ViewLayer *view_layer = BLI_findlink(&re->view_layers, re->active_view_layer);
+
+ if (view_layer) {
+ RenderLayer *rl = BLI_findstring(&rr->layers,
+ view_layer->name,
+ offsetof(RenderLayer, name));
+
+ if (rl) {
+ return rl;
+ }
+ }
+
+ return rr->layers.first;
}
static int UNUSED_FUNCTION(render_scene_needs_vector)(Render *re)