[Bf-blender-cvs] [e0936e74abc] master: Fix image editor showing pass name when there is only a combined pass.

Brecht Van Lommel noreply at git.blender.org
Wed Nov 8 00:02:48 CET 2017


Commit: e0936e74abc5c9349fa55abe0f79f96f5add9f37
Author: Brecht Van Lommel
Date:   Thu Oct 26 14:17:58 2017 +0200
Branches: master
https://developer.blender.org/rBe0936e74abc5c9349fa55abe0f79f96f5add9f37

Fix image editor showing pass name when there is only a combined pass.

===================================================================

M	source/blender/editors/space_image/image_buttons.c
M	source/blender/render/extern/include/RE_pipeline.h
M	source/blender/render/intern/source/pipeline.c

===================================================================

diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c
index 8037c2deb5b..6cee48ad05b 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);
 }
 
@@ -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 &&
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index cf9298bdb9e..61d0750a9c6 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -342,6 +342,7 @@ void RE_zbuf_accumulate_vecblur(
 int RE_seq_render_active(struct Scene *scene, struct RenderData *rd);
 
 bool RE_layers_have_name(struct RenderResult *result);
+bool RE_passes_have_name(struct RenderLayer *rl);
 
 struct RenderPass *RE_pass_find_by_name(volatile struct RenderLayer *rl, const char *name, const char *viewname);
 struct RenderPass *RE_pass_find_by_type(volatile struct RenderLayer *rl, int passtype, const char *viewname);
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 837721e8943..2eac20214ba 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -4024,7 +4024,7 @@ bool RE_WriteEnvmapResult(struct ReportList *reports, Scene *scene, EnvMap *env,
 	}
 }
 
-/* used in the interface to decide whether to show layers */
+/* Used in the interface to decide whether to show layers or passes. */
 bool RE_layers_have_name(struct RenderResult *rr)
 {
 	switch (BLI_listbase_count_ex(&rr->layers, 2)) {
@@ -4038,6 +4038,17 @@ bool RE_layers_have_name(struct RenderResult *rr)
 	return false;
 }
 
+bool RE_passes_have_name(struct RenderLayer *rl)
+{
+	for (RenderPass *rp = rl->passes.first; rp; rp = rp->next) {
+		if (!STREQ(rp->name, "Combined")) {
+			return true;
+		}
+	}
+
+	return false;
+}
+
 RenderPass *RE_pass_find_by_name(volatile RenderLayer *rl, const char *name, const char *viewname)
 {
 	RenderPass *rp = NULL;



More information about the Bf-blender-cvs mailing list