diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2015-09-09 17:41:46 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-09-09 17:42:35 +0300 |
commit | 5317dc716e3e0123570674e4637342cbd5d9559b (patch) | |
tree | 7a309f5a14cdcfbeb069a6c0b36dd5474e6e5ef4 /source/blender/editors | |
parent | c028b5980bc2db662a67b9c7e9c5743b4d5a72e5 (diff) |
Fix T45839 : Regression - Multi-layer image issues when using non-standard names
This was introduced in the fix for T44336 .
The code is now what it should have been in the first place at the time
of multiview commit.
ImageUser->passtype is being removed in favour of bringing
ImageUser->pass back.
Reviewers: sergey
Differential Revision: https://developer.blender.org/D1504
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/render/render_internal.c | 4 | ||||
-rw-r--r-- | source/blender/editors/space_image/image_buttons.c | 63 | ||||
-rw-r--r-- | source/blender/editors/space_image/space_image.c | 1 |
3 files changed, 34 insertions, 34 deletions
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index 755b8dd303d..10de2d667ea 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -190,7 +190,7 @@ static void image_buffer_rect_update(RenderJob *rj, RenderResult *rr, ImBuf *ibu * - sergey - */ /* TODO(sergey): Need to check has_combined here? */ - if (iuser->passtype == SCE_PASS_COMBINED) { + if (iuser->pass == 0) { RenderView *rv; size_t view_id = BKE_scene_multiview_view_id_get(&scene->r, viewname); rv = RE_RenderViewGetById(rr, view_id); @@ -525,6 +525,7 @@ static void render_image_update_pass_and_layer(RenderJob *rj, RenderResult *rr, } } + iuser->pass = sima->iuser.pass; iuser->layer = sima->iuser.layer; RE_ReleaseResult(rj->re); @@ -898,7 +899,6 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even rj->write_still = is_write_still && !is_animation; rj->iuser.scene = scene; rj->iuser.ok = 1; - rj->iuser.passtype = SCE_PASS_COMBINED; rj->reports = op->reports; rj->orig_layer = 0; rj->last_layer = 0; diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c index 579860726c6..3af210f376b 100644 --- a/source/blender/editors/space_image/image_buttons.c +++ b/source/blender/editors/space_image/image_buttons.c @@ -418,7 +418,7 @@ static void ui_imageuser_pass_menu(bContext *UNUSED(C), uiLayout *layout, void * uiItemS(layout); - nr = (rl ? BLI_listbase_count(&rl->passes) : 0) - 1; + nr = 0; fake_name = ui_imageuser_pass_fake_name(rl); if (fake_name) { @@ -427,7 +427,8 @@ static void ui_imageuser_pass_menu(bContext *UNUSED(C), uiLayout *layout, void * } /* rendered results don't have a Combined pass */ - for (rpass = rl ? rl->passes.last : NULL; rpass; rpass = rpass->prev, nr--) { + /* multiview: the ordering must be ascending, so the left-most pass is always the one picked */ + for (rpass = rl ? rl->passes.first : NULL; rpass; rpass = rpass->next, nr++) { /* just show one pass of each kind */ if (passflag & rpass->passtype) @@ -436,18 +437,17 @@ static void ui_imageuser_pass_menu(bContext *UNUSED(C), uiLayout *layout, void * passflag |= rpass->passtype; final: - uiDefButI(block, UI_BTYPE_BUT_MENU, B_NOP, IFACE_(rpass->internal_name), 0, 0, - UI_UNIT_X * 5, UI_UNIT_X, &iuser->passtype, (float) rpass->passtype, 0.0, 0, -1, ""); + uiDefButS(block, UI_BTYPE_BUT_MENU, B_NOP, IFACE_(rpass->internal_name), 0, 0, + UI_UNIT_X * 5, UI_UNIT_X, &iuser->pass, (float) nr, 0.0, 0, -1, ""); } if (fake_name) { fake_name = NULL; rpass = &rpass_fake; + nr = 0; goto final; } - BLI_assert(nr == -1); - BKE_image_release_renderresult(scene, image); } @@ -550,7 +550,6 @@ static void image_multi_incpass_cb(bContext *C, void *rr_v, void *iuser_v) ImageUser *iuser = iuser_v; RenderLayer *rl; RenderPass *rp; - RenderPass *next = NULL; int layer = iuser->layer; if (RE_HasFakeLayer(rr)) @@ -559,20 +558,20 @@ static void image_multi_incpass_cb(bContext *C, void *rr_v, void *iuser_v) rl = BLI_findlink(&rr->layers, layer); if (rl) { - for (rp = rl->passes.first; rp; rp = rp->next) { - if (rp->passtype == iuser->passtype) { - next = rp->next; - if (next != NULL && next->passtype == rp->passtype) - next = next->next; + RenderPass *rpass = BLI_findlink(&rl->passes, iuser->pass); + int rp_index = iuser->pass + 1; + + if (rpass == NULL) + return; + + for (rp = rpass->next; rp; rp = rp->next, rp_index++) { + if (rp->passtype != rpass->passtype) { + iuser->pass = rp_index; + BKE_image_multilayer_index(rr, iuser); + WM_event_add_notifier(C, NC_IMAGE | ND_DRAW, NULL); break; } } - - if (next != NULL && iuser->passtype != next->passtype) { - iuser->passtype = next->passtype; - BKE_image_multilayer_index(rr, iuser); - WM_event_add_notifier(C, NC_IMAGE | ND_DRAW, NULL); - } } } static void image_multi_decpass_cb(bContext *C, void *rr_v, void *iuser_v) @@ -581,29 +580,31 @@ static void image_multi_decpass_cb(bContext *C, void *rr_v, void *iuser_v) ImageUser *iuser = iuser_v; RenderLayer *rl; RenderPass *rp; - RenderPass *prev = NULL; int layer = iuser->layer; + if (iuser->pass == 0) + return; + if (RE_HasFakeLayer(rr)) layer -= 1; rl = BLI_findlink(&rr->layers, layer); if (rl) { - for (rp = rl->passes.last; rp; rp = rp->prev) { - if (rp->passtype == iuser->passtype) { - prev = rp->prev; - if (prev != NULL && prev->passtype == rp->passtype) - prev = prev->prev; + RenderPass *rpass = BLI_findlink(&rl->passes, iuser->pass); + int rp_index = 0; + + if (rpass == NULL) + return; + + for (rp = rl->passes.first; rp; rp = rp->next, rp_index++) { + if (rp->passtype == rpass->passtype) { + iuser->pass = rp_index - 1; + BKE_image_multilayer_index(rr, iuser); + WM_event_add_notifier(C, NC_IMAGE | ND_DRAW, NULL); break; } } - - if (prev != NULL && iuser->passtype != prev->passtype) { - iuser->passtype = prev->passtype; - BKE_image_multilayer_index(rr, iuser); - WM_event_add_notifier(C, NC_IMAGE | ND_DRAW, NULL); - } } } @@ -692,7 +693,7 @@ static void uiblock_layer_pass_buttons(uiLayout *layout, Image *image, RenderRes /* pass */ fake_name = ui_imageuser_pass_fake_name(rl); - rpass = (rl ? RE_pass_find_by_type(rl, iuser->passtype, ((RenderView *)rr->views.first)->name) : NULL); + rpass = (rl ? BLI_findlink(&rl->passes, iuser->pass - (fake_name ? 1 : 0)) : NULL); display_name = rpass ? rpass->internal_name : (fake_name ? fake_name : ""); but = uiDefMenuBut(block, ui_imageuser_pass_menu, rnd_pt, IFACE_(display_name), diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c index 928e064b730..98a0752f64d 100644 --- a/source/blender/editors/space_image/space_image.c +++ b/source/blender/editors/space_image/space_image.c @@ -157,7 +157,6 @@ static SpaceLink *image_new(const bContext *UNUSED(C)) simage->iuser.fie_ima = 2; simage->iuser.frames = 100; simage->iuser.flag = IMA_SHOW_STEREO; - simage->iuser.passtype = SCE_PASS_COMBINED; scopes_new(&simage->scopes); simage->sample_line_hist.height = 100; |