diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2017-11-08 02:20:59 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2017-11-08 02:20:59 +0300 |
commit | 7b1d7074817dac9d0f088e8e7e5b336bae662c36 (patch) | |
tree | 4ebd67459d2fc160d3a6c76a2509cefc68f4e89c /source/blender/editors/space_image | |
parent | 1b18e158025a488e1ba2446ad93c2eb563c11611 (diff) | |
parent | a0478ebe379c8384376586e2880ebc813a6afef7 (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/editors/space_image')
-rw-r--r-- | source/blender/editors/space_image/image_buttons.c | 54 | ||||
-rw-r--r-- | source/blender/editors/space_image/image_ops.c | 33 |
2 files changed, 29 insertions, 58 deletions
diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c index 8037c2deb5b..d2897c7264b 100644 --- a/source/blender/editors/space_image/image_buttons.c +++ b/source/blender/editors/space_image/image_buttons.c @@ -403,16 +403,6 @@ final: BKE_image_release_renderresult(scene, image); } -static const char *ui_imageuser_pass_fake_name(RenderLayer *rl) -{ - if (rl == NULL) { - return IFACE_("Combined"); - } - else { - return NULL; - } -} - static void ui_imageuser_pass_menu(bContext *UNUSED(C), uiLayout *layout, void *rnd_pt) { struct ImageUI_Data *rnd_data = rnd_pt; @@ -424,9 +414,7 @@ static void ui_imageuser_pass_menu(bContext *UNUSED(C), uiLayout *layout, void * Scene *scene = iuser->scene; RenderResult *rr; RenderLayer *rl; - RenderPass rpass_fake = {NULL}; RenderPass *rpass; - const char *fake_name; int nr; /* may have been freed since drawing */ @@ -445,13 +433,7 @@ static void ui_imageuser_pass_menu(bContext *UNUSED(C), uiLayout *layout, void * uiItemS(layout); - nr = 0; - fake_name = ui_imageuser_pass_fake_name(rl); - - if (fake_name) { - BLI_strncpy(rpass_fake.name, fake_name, sizeof(rpass_fake.name)); - nr += 1; - } + nr = (rl == NULL)? 1: 0; ListBase added_passes; BLI_listbase_clear(&added_passes); @@ -471,11 +453,6 @@ static void ui_imageuser_pass_menu(bContext *UNUSED(C), uiLayout *layout, void * BLI_freelistN(&added_passes); - if (fake_name) { - uiDefButS(block, UI_BTYPE_BUT_MENU, B_NOP, IFACE_(rpass_fake.name), 0, 0, - UI_UNIT_X * 5, UI_UNIT_X, &iuser->pass, 0.0f, 0.0, 0, -1, ""); - } - BKE_image_release_renderresult(scene, image); } @@ -571,7 +548,7 @@ static bool ui_imageuser_layer_menu_step(bContext *C, int direction, void *rnd_p else if (direction == 1) { int tot = BLI_listbase_count(&rr->layers); - if (RE_HasFakeLayer(rr)) + if (RE_HasCombinedLayer(rr)) tot++; /* fake compo/sequencer layer */ if (iuser->layer < tot - 1) { @@ -611,7 +588,7 @@ static bool ui_imageuser_pass_menu_step(bContext *C, int direction, void *rnd_pt return false; } - if (RE_HasFakeLayer(rr)) { + if (RE_HasCombinedLayer(rr)) { layer -= 1; } @@ -770,18 +747,19 @@ static void uiblock_layer_pass_buttons( } /* pass */ - fake_name = ui_imageuser_pass_fake_name(rl); - rpass = (rl ? BLI_findlink(&rl->passes, iuser->pass - (fake_name ? 1 : 0)) : NULL); + rpass = (rl ? BLI_findlink(&rl->passes, iuser->pass) : NULL); - display_name = rpass ? rpass->name : (fake_name ? fake_name : ""); - rnd_pt = ui_imageuser_data_copy(&rnd_pt_local); - but = uiDefMenuBut( - block, ui_imageuser_pass_menu, rnd_pt, IFACE_(display_name), - 0, 0, wmenu3, UI_UNIT_Y, TIP_("Select Pass")); - UI_but_func_menu_step_set(but, ui_imageuser_pass_menu_step); - UI_but_funcN_set(but, image_multi_cb, rnd_pt, rr); - UI_but_type_set_menu_from_pulldown(but); - rnd_pt = NULL; + if (rpass && RE_passes_have_name(rl)) { + display_name = rpass->name; + rnd_pt = ui_imageuser_data_copy(&rnd_pt_local); + but = uiDefMenuBut( + block, ui_imageuser_pass_menu, rnd_pt, IFACE_(display_name), + 0, 0, wmenu3, UI_UNIT_Y, TIP_("Select Pass")); + UI_but_func_menu_step_set(but, ui_imageuser_pass_menu_step); + UI_but_funcN_set(but, image_multi_cb, rnd_pt, rr); + UI_but_type_set_menu_from_pulldown(but); + rnd_pt = NULL; + } /* view */ if (BLI_listbase_count_ex(&rr->views, 2) > 1 && @@ -1134,7 +1112,7 @@ void uiTemplateImageSettings(uiLayout *layout, PointerRNA *imfptr, int color_man uiItemR(row, imfptr, "use_zbuffer", 0, NULL, ICON_NONE); } - if (is_render_out && (imf->imtype == R_IMF_IMTYPE_OPENEXR)) { + if (is_render_out && ELEM(imf->imtype, R_IMF_IMTYPE_OPENEXR, R_IMF_IMTYPE_MULTILAYER)) { show_preview = true; uiItemR(row, imfptr, "use_preview", 0, NULL, ICON_NONE); } diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index dbefcf3d297..ccbc8330810 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -1830,9 +1830,6 @@ static bool save_image_doit(bContext *C, SpaceImage *sima, wmOperator *op, SaveI const bool save_as_render = (RNA_struct_find_property(op->ptr, "save_as_render") && RNA_boolean_get(op->ptr, "save_as_render")); ImageFormatData *imf = &simopts->im_format; - const bool is_multilayer = imf->imtype == R_IMF_IMTYPE_MULTILAYER; - bool is_mono; - /* old global to ensure a 2nd save goes to same dir */ BLI_strncpy(G.ima, simopts->filepath, sizeof(G.ima)); @@ -1859,7 +1856,8 @@ static bool save_image_doit(bContext *C, SpaceImage *sima, wmOperator *op, SaveI /* we need renderresult for exr and rendered multiview */ scene = CTX_data_scene(C); rr = BKE_image_acquire_renderresult(scene, ima); - is_mono = rr ? BLI_listbase_count_ex(&rr->views, 2) < 2 : BLI_listbase_count_ex(&ima->views, 2) < 2; + bool is_mono = rr ? BLI_listbase_count_ex(&rr->views, 2) < 2 : BLI_listbase_count_ex(&ima->views, 2) < 2; + bool is_exr_rr = rr && ELEM(imf->imtype, R_IMF_IMTYPE_OPENEXR, R_IMF_IMTYPE_MULTILAYER); /* error handling */ if (!rr) { @@ -1889,28 +1887,23 @@ static bool save_image_doit(bContext *C, SpaceImage *sima, wmOperator *op, SaveI } /* fancy multiview OpenEXR */ - if ((imf->imtype == R_IMF_IMTYPE_MULTILAYER) && (imf->views_format == R_IMF_VIEWS_MULTIVIEW)) { - ok = RE_WriteRenderResult(op->reports, rr, simopts->filepath, imf, true, NULL); + if (imf->views_format == R_IMF_VIEWS_MULTIVIEW && is_exr_rr) { + /* save render result */ + ok = RE_WriteRenderResult(op->reports, rr, simopts->filepath, imf, NULL, sima->iuser.layer); save_image_post(op, ibuf, ima, ok, true, relbase, relative, do_newpath, simopts->filepath); ED_space_image_release_buffer(sima, ibuf, lock); } - else if ((imf->imtype == R_IMF_IMTYPE_OPENEXR) && (imf->views_format == R_IMF_VIEWS_MULTIVIEW)) { - /* treat special Openexr case separetely (this is the singlelayer multiview OpenEXR */ - BKE_imbuf_write_prepare(ibuf, imf); - ok = BKE_image_save_openexr_multiview(ima, ibuf, simopts->filepath, (IB_rect | IB_zbuf | IB_zbuffloat | IB_multiview)); - ED_space_image_release_buffer(sima, ibuf, lock); - } /* regular mono pipeline */ else if (is_mono) { - if (is_multilayer) { - ok = RE_WriteRenderResult(op->reports, rr, simopts->filepath, imf, false, NULL); + if (is_exr_rr) { + ok = RE_WriteRenderResult(op->reports, rr, simopts->filepath, imf, NULL, -1); } else { colormanaged_ibuf = IMB_colormanagement_imbuf_for_write(ibuf, save_as_render, true, &imf->view_settings, &imf->display_settings, imf); ok = BKE_imbuf_write_as(colormanaged_ibuf, simopts->filepath, imf, save_copy); save_imbuf_post(ibuf, colormanaged_ibuf); } - save_image_post(op, ibuf, ima, ok, (is_multilayer ? true : save_copy), relbase, relative, do_newpath, simopts->filepath); + save_image_post(op, ibuf, ima, ok, (is_exr_rr ? true : save_copy), relbase, relative, do_newpath, simopts->filepath); ED_space_image_release_buffer(sima, ibuf, lock); } /* individual multiview images */ @@ -1919,7 +1912,7 @@ static bool save_image_doit(bContext *C, SpaceImage *sima, wmOperator *op, SaveI unsigned char planes = ibuf->planes; const int totviews = (rr ? BLI_listbase_count(&rr->views) : BLI_listbase_count(&ima->views)); - if (!is_multilayer) { + if (!is_exr_rr) { ED_space_image_release_buffer(sima, ibuf, lock); } @@ -1929,9 +1922,9 @@ static bool save_image_doit(bContext *C, SpaceImage *sima, wmOperator *op, SaveI const char *view = rr ? ((RenderView *) BLI_findlink(&rr->views, i))->name : ((ImageView *) BLI_findlink(&ima->views, i))->name; - if (is_multilayer) { + if (is_exr_rr) { BKE_scene_multiview_view_filepath_get(&scene->r, simopts->filepath, view, filepath); - ok_view = RE_WriteRenderResult(op->reports, rr, filepath, imf, false, view); + ok_view = RE_WriteRenderResult(op->reports, rr, filepath, imf, view, -1); save_image_post(op, ibuf, ima, ok_view, true, relbase, relative, do_newpath, filepath); } else { @@ -1959,14 +1952,14 @@ static bool save_image_doit(bContext *C, SpaceImage *sima, wmOperator *op, SaveI ok &= ok_view; } - if (is_multilayer) { + if (is_exr_rr) { ED_space_image_release_buffer(sima, ibuf, lock); } } /* stereo (multiview) images */ else if (simopts->im_format.views_format == R_IMF_VIEWS_STEREO_3D) { if (imf->imtype == R_IMF_IMTYPE_MULTILAYER) { - ok = RE_WriteRenderResult(op->reports, rr, simopts->filepath, imf, false, NULL); + ok = RE_WriteRenderResult(op->reports, rr, simopts->filepath, imf, NULL, -1); save_image_post(op, ibuf, ima, ok, true, relbase, relative, do_newpath, simopts->filepath); ED_space_image_release_buffer(sima, ibuf, lock); } |