Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_image/image_buttons.c
| Show First 20 Lines • Show All 397 Lines • ▼ Show 20 Lines | if (fake_name) { | ||||
| goto final; | goto final; | ||||
| } | } | ||||
| BLI_assert(nr == -1); | BLI_assert(nr == -1); | ||||
| BKE_image_release_renderresult(scene, image); | 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) | static void ui_imageuser_pass_menu(bContext *UNUSED(C), uiLayout *layout, void *rnd_pt) | ||||
| { | { | ||||
| struct ImageUI_Data *rnd_data = rnd_pt; | struct ImageUI_Data *rnd_data = rnd_pt; | ||||
| uiBlock *block = uiLayoutGetBlock(layout); | uiBlock *block = uiLayoutGetBlock(layout); | ||||
| Image *image = rnd_data->image; | Image *image = rnd_data->image; | ||||
| ImageUser *iuser = rnd_data->iuser; | ImageUser *iuser = rnd_data->iuser; | ||||
| /* (rpass_index == -1) means composite result */ | /* (rpass_index == -1) means composite result */ | ||||
| const int rpass_index = rnd_data->rpass_index; | const int rpass_index = rnd_data->rpass_index; | ||||
| Scene *scene = iuser->scene; | Scene *scene = iuser->scene; | ||||
| RenderResult *rr; | RenderResult *rr; | ||||
| RenderLayer *rl; | RenderLayer *rl; | ||||
| RenderPass rpass_fake = {NULL}; | |||||
| RenderPass *rpass; | RenderPass *rpass; | ||||
| const char *fake_name; | |||||
| int nr; | int nr; | ||||
| /* may have been freed since drawing */ | /* may have been freed since drawing */ | ||||
| rr = BKE_image_acquire_renderresult(scene, image); | rr = BKE_image_acquire_renderresult(scene, image); | ||||
| if (UNLIKELY(rr == NULL)) { | if (UNLIKELY(rr == NULL)) { | ||||
| return; | return; | ||||
| } | } | ||||
| rl = BLI_findlink(&rr->layers, rpass_index); | rl = BLI_findlink(&rr->layers, rpass_index); | ||||
| UI_block_layout_set_current(block, layout); | UI_block_layout_set_current(block, layout); | ||||
| uiLayoutColumn(layout, false); | uiLayoutColumn(layout, false); | ||||
| uiDefBut(block, UI_BTYPE_LABEL, 0, IFACE_("Pass"), | uiDefBut(block, UI_BTYPE_LABEL, 0, IFACE_("Pass"), | ||||
| 0, 0, UI_UNIT_X * 5, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, ""); | 0, 0, UI_UNIT_X * 5, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, ""); | ||||
| uiItemS(layout); | uiItemS(layout); | ||||
| nr = 0; | nr = (rl == NULL)? 1: 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; | |||||
| } | |||||
| ListBase added_passes; | ListBase added_passes; | ||||
| BLI_listbase_clear(&added_passes); | BLI_listbase_clear(&added_passes); | ||||
| /* rendered results don't have a Combined pass */ | /* rendered results don't have a Combined pass */ | ||||
| /* multiview: the ordering must be ascending, so the left-most pass is always the one picked */ | /* 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++) { | for (rpass = rl ? rl->passes.first : NULL; rpass; rpass = rpass->next, nr++) { | ||||
| /* just show one pass of each kind */ | /* just show one pass of each kind */ | ||||
| if (BLI_findstring_ptr(&added_passes, rpass->name, offsetof(LinkData, data))) { | if (BLI_findstring_ptr(&added_passes, rpass->name, offsetof(LinkData, data))) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| BLI_addtail(&added_passes, BLI_genericNodeN(rpass->name)); | BLI_addtail(&added_passes, BLI_genericNodeN(rpass->name)); | ||||
| uiDefButS(block, UI_BTYPE_BUT_MENU, B_NOP, IFACE_(rpass->name), 0, 0, | uiDefButS(block, UI_BTYPE_BUT_MENU, B_NOP, IFACE_(rpass->name), 0, 0, | ||||
| UI_UNIT_X * 5, UI_UNIT_X, &iuser->pass, (float) nr, 0.0, 0, -1, ""); | UI_UNIT_X * 5, UI_UNIT_X, &iuser->pass, (float) nr, 0.0, 0, -1, ""); | ||||
| } | } | ||||
| BLI_freelistN(&added_passes); | 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); | BKE_image_release_renderresult(scene, image); | ||||
| } | } | ||||
| /**************************** view menus *****************************/ | /**************************** view menus *****************************/ | ||||
| static void ui_imageuser_view_menu_rr(bContext *UNUSED(C), uiLayout *layout, void *rnd_pt) | static void ui_imageuser_view_menu_rr(bContext *UNUSED(C), uiLayout *layout, void *rnd_pt) | ||||
| { | { | ||||
| struct ImageUI_Data *rnd_data = rnd_pt; | struct ImageUI_Data *rnd_data = rnd_pt; | ||||
| uiBlock *block = uiLayoutGetBlock(layout); | uiBlock *block = uiLayoutGetBlock(layout); | ||||
| ▲ Show 20 Lines • Show All 278 Lines • ▼ Show 20 Lines | if (RE_layers_have_name(rr)) { | ||||
| 0, 0, wmenu2, UI_UNIT_Y, TIP_("Select Layer")); | 0, 0, wmenu2, UI_UNIT_Y, TIP_("Select Layer")); | ||||
| UI_but_func_menu_step_set(but, ui_imageuser_layer_menu_step); | UI_but_func_menu_step_set(but, ui_imageuser_layer_menu_step); | ||||
| UI_but_funcN_set(but, image_multi_cb, rnd_pt, rr); | UI_but_funcN_set(but, image_multi_cb, rnd_pt, rr); | ||||
| UI_but_type_set_menu_from_pulldown(but); | UI_but_type_set_menu_from_pulldown(but); | ||||
| rnd_pt = NULL; | rnd_pt = NULL; | ||||
| } | } | ||||
| /* pass */ | /* pass */ | ||||
| fake_name = ui_imageuser_pass_fake_name(rl); | rpass = (rl ? BLI_findlink(&rl->passes, iuser->pass) : NULL); | ||||
| rpass = (rl ? BLI_findlink(&rl->passes, iuser->pass - (fake_name ? 1 : 0)) : NULL); | |||||
| display_name = rpass ? rpass->name : (fake_name ? fake_name : ""); | if (rpass && RE_passes_have_name(rl)) { | ||||
| display_name = rpass->name; | |||||
| rnd_pt = ui_imageuser_data_copy(&rnd_pt_local); | rnd_pt = ui_imageuser_data_copy(&rnd_pt_local); | ||||
| but = uiDefMenuBut( | but = uiDefMenuBut( | ||||
| block, ui_imageuser_pass_menu, rnd_pt, IFACE_(display_name), | block, ui_imageuser_pass_menu, rnd_pt, IFACE_(display_name), | ||||
| 0, 0, wmenu3, UI_UNIT_Y, TIP_("Select Pass")); | 0, 0, wmenu3, UI_UNIT_Y, TIP_("Select Pass")); | ||||
| UI_but_func_menu_step_set(but, ui_imageuser_pass_menu_step); | 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_funcN_set(but, image_multi_cb, rnd_pt, rr); | ||||
| UI_but_type_set_menu_from_pulldown(but); | UI_but_type_set_menu_from_pulldown(but); | ||||
| rnd_pt = NULL; | rnd_pt = NULL; | ||||
| } | |||||
| /* view */ | /* view */ | ||||
| if (BLI_listbase_count_ex(&rr->views, 2) > 1 && | if (BLI_listbase_count_ex(&rr->views, 2) > 1 && | ||||
| ((!show_stereo) || (!RE_RenderResult_is_stereo(rr)))) | ((!show_stereo) || (!RE_RenderResult_is_stereo(rr)))) | ||||
| { | { | ||||
| rview = BLI_findlink(&rr->views, iuser->view); | rview = BLI_findlink(&rr->views, iuser->view); | ||||
| display_name = rview ? rview->name : ""; | display_name = rview ? rview->name : ""; | ||||
| ▲ Show 20 Lines • Show All 577 Lines • Show Last 20 Lines | |||||