[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46760] trunk/blender/source/blender: Partial revert of r46542.

Lukas Toenne lukas.toenne at googlemail.com
Fri May 18 11:26:56 CEST 2012


Revision: 46760
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46760
Author:   lukastoenne
Date:     2012-05-18 09:26:55 +0000 (Fri, 18 May 2012)
Log Message:
-----------
Partial revert of r46542.
Displaying image layers with flattened names (render_layer.render_pass) can lead to extremely long socket lists, especially with older files that were used with distinct render layers before. In general the flattening of names would be preferable, but it needs a sensible way of limiting the number of displayed outputs. For now the render layer dropdown selection is the best option to ensure usability.

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46542

Modified Paths:
--------------
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/compositor/nodes/COM_ImageNode.cpp
    trunk/blender/source/blender/editors/space_node/drawnode.c
    trunk/blender/source/blender/makesdna/DNA_node_types.h
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/nodes/composite/nodes/node_composite_image.c

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2012-05-18 08:59:05 UTC (rev 46759)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2012-05-18 09:26:55 UTC (rev 46760)
@@ -6855,13 +6855,10 @@
 	
 	for (node = ntree->nodes.first; node; node = node->next) {
 		if (node->type == CMP_NODE_IMAGE) {
-			ImageUser *iuser = (ImageUser *)node->storage;
 			bNodeSocket *sock;
 			for (sock = node->outputs.first; sock; sock = sock->next) {
 				NodeImageLayer *output = MEM_callocN(sizeof(NodeImageLayer), "node image layer");
 				
-				/* take layer index from image user (this is ignored from now on) */
-				output->layer_index = iuser->layer;
 				/* take pass index both from current storage ptr (actually an int) */
 				output->pass_index = GET_INT_FROM_POINTER(sock->storage);
 				

Modified: trunk/blender/source/blender/compositor/nodes/COM_ImageNode.cpp
===================================================================
--- trunk/blender/source/blender/compositor/nodes/COM_ImageNode.cpp	2012-05-18 08:59:05 UTC (rev 46759)
+++ trunk/blender/source/blender/compositor/nodes/COM_ImageNode.cpp	2012-05-18 09:26:55 UTC (rev 46760)
@@ -71,23 +71,21 @@
 	if (image && image->type==IMA_TYPE_MULTILAYER) {
 		BKE_image_get_ibuf(image, imageuser);
 		if (image->rr) {
-			OutputSocket * socket;
-			int index;
-			for (index = 0 ; index < numberOfOutputs ; index ++) {
-				socket = this->getOutputSocket(index);
-				if (socket->isConnected() || index == 0) {
-					bNodeSocket *bnodeSocket = socket->getbNodeSocket();
-					NodeImageLayer *storage = (NodeImageLayer*)bnodeSocket->storage;
-					int passindex = storage->pass_index;
-					int layerindex = storage->layer_index;
-					RenderLayer *rl = (RenderLayer*)BLI_findlink(&image->rr->layers, layerindex);
-					if (rl) {
-					
+			RenderLayer *rl = (RenderLayer*)BLI_findlink(&image->rr->layers, imageuser->layer);
+			if (rl) {
+				OutputSocket * socket;
+				int index;
+				for (index = 0 ; index < numberOfOutputs ; index ++) {
+					socket = this->getOutputSocket(index);
+					if (socket->isConnected() || index == 0) {
+						bNodeSocket *bnodeSocket = socket->getbNodeSocket();
+						NodeImageLayer *storage = (NodeImageLayer*)bnodeSocket->storage;
+						int passindex = storage->pass_index;
+						
 						RenderPass *rpass = (RenderPass *)BLI_findlink(&rl->passes, passindex);
 						if (rpass) {
 							NodeOperation * operation = NULL;
 							imageuser->pass = passindex;
-							imageuser->layer = layerindex;
 							switch (rpass->channels) {
 							case 1:
 								operation = doMultilayerCheck(graph, rl, image, imageuser, framenumber, index, passindex, COM_DT_VALUE);

Modified: trunk/blender/source/blender/editors/space_node/drawnode.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/drawnode.c	2012-05-18 08:59:05 UTC (rev 46759)
+++ trunk/blender/source/blender/editors/space_node/drawnode.c	2012-05-18 09:26:55 UTC (rev 46760)
@@ -1262,6 +1262,9 @@
 	}
 
 	col= uiLayoutColumn(layout, 0);
+
+	if (RNA_enum_get(&imaptr, "type")== IMA_TYPE_MULTILAYER)
+		uiItemR(col, ptr, "layer", 0, NULL, ICON_NONE);
 }
 
 static void node_composit_buts_renderlayers(uiLayout *layout, bContext *C, PointerRNA *ptr)

Modified: trunk/blender/source/blender/makesdna/DNA_node_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_node_types.h	2012-05-18 08:59:05 UTC (rev 46759)
+++ trunk/blender/source/blender/makesdna/DNA_node_types.h	2012-05-18 09:26:55 UTC (rev 46760)
@@ -398,8 +398,8 @@
 
 /* layer info for image node outputs */
 typedef struct NodeImageLayer {
-	/* index in the Image->layers and Image->layers->passes lists */
-	int layer_index, pass_index;
+	/* index in the Image->layers->passes lists */
+	int pass_index;
 	/* render pass flag, in case this is an original render pass */
 	int pass_flag;
 } NodeImageLayer;

Modified: trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2012-05-18 08:59:05 UTC (rev 46759)
+++ trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2012-05-18 09:26:55 UTC (rev 46760)
@@ -492,6 +492,18 @@
 	*softmax = val->max;
 }
 
+static void rna_Node_image_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+	bNode *node = (bNode*)ptr->data;
+	Image *ima = (Image *)node->id;
+	ImageUser *iuser = node->storage;
+	
+	BKE_image_multilayer_index(ima->rr, iuser);
+	BKE_image_signal(ima, iuser, IMA_SIGNAL_SRC_CHANGE);
+	
+	rna_Node_update(bmain, scene, ptr);
+}
+
 static EnumPropertyItem *renderresult_layers_add_enum(RenderLayer *rl)
 {
 	EnumPropertyItem *item = NULL;
@@ -511,6 +523,24 @@
 	return item;
 }
 
+static EnumPropertyItem *rna_Node_image_layer_itemf(bContext *UNUSED(C), PointerRNA *ptr,
+                                                    PropertyRNA *UNUSED(prop), int *free)
+{
+	bNode *node = (bNode*)ptr->data;
+	Image *ima = (Image *)node->id;
+	EnumPropertyItem *item = NULL;
+	RenderLayer *rl;
+	
+	if (!ima || !(ima->rr)) return NULL;
+	
+	rl = ima->rr->layers.first;
+	item = renderresult_layers_add_enum(rl);
+	
+	*free = 1;
+	
+	return item;
+}
+
 static EnumPropertyItem *rna_Node_scene_layer_itemf(bContext *UNUSED(C), PointerRNA *ptr,
                                                     PropertyRNA *UNUSED(prop), int *free)
 {
@@ -897,6 +927,10 @@
 
 #else
 
+static EnumPropertyItem prop_image_layer_items[] = {
+{ 0, "PLACEHOLDER",          0, "Placeholder",          ""},
+{0, NULL, 0, NULL, NULL}};
+
 static EnumPropertyItem prop_scene_layer_items[] = {
 { 0, "PLACEHOLDER",          0, "Placeholder",          ""},
 {0, NULL, 0, NULL, NULL}};
@@ -1816,6 +1850,13 @@
 		/* copied from the rna_image.c */
 	RNA_def_property_ui_text(prop, "Auto-Refresh", "Always refresh image on frame changes");
 	RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+	prop = RNA_def_property(srna, "layer", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "layer");
+	RNA_def_property_enum_items(prop, prop_image_layer_items);
+	RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Node_image_layer_itemf");
+	RNA_def_property_ui_text(prop, "Layer", "");
+	RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_image_layer_update");
 }
 
 static void def_cmp_render_layers(StructRNA *srna)

Modified: trunk/blender/source/blender/nodes/composite/nodes/node_composite_image.c
===================================================================
--- trunk/blender/source/blender/nodes/composite/nodes/node_composite_image.c	2012-05-18 08:59:05 UTC (rev 46759)
+++ trunk/blender/source/blender/nodes/composite/nodes/node_composite_image.c	2012-05-18 09:26:55 UTC (rev 46760)
@@ -145,37 +145,26 @@
 		cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_TRANSM_COLOR, RRES_OUT_TRANSM_COLOR);
 }
 
-static void cmp_node_image_add_multilayer_outputs(bNodeTree *ntree, bNode *node, ListBase *layers)
+static void cmp_node_image_add_multilayer_outputs(bNodeTree *ntree, bNode *node, RenderLayer *rl)
 {
 	bNodeSocket *sock;
 	NodeImageLayer *sockdata;
-	RenderLayer *rl;
 	RenderPass *rpass;
-	int layer_index, pass_index;
-	char name[30];	/* EXR_TOT_MAXNAME-2 ('.' and channel char are appended) */
-	int type;
-	
-	for (rl=layers->first, layer_index=0; rl; rl=rl->next, ++layer_index) {
-		for (rpass=rl->passes.first, pass_index=0; rpass; rpass=rpass->next, ++pass_index) {
-			/* reconstruct layer name from <render layer>.<render pass> strings */
-			if (rl->name[0] != '\0')
-				BLI_snprintf(name, sizeof(name), "%s.%s", rl->name, rpass->name);
-			else
-				BLI_strncpy(name, rpass->name, sizeof(name));
-			
-			if (rpass->channels == 1)
-				type = SOCK_FLOAT;
-			else
-				type = SOCK_RGBA;
-			
-			sock = nodeAddSocket(ntree, node, SOCK_OUT, name, type);
-			/* extra socket info */
-			sockdata = MEM_callocN(sizeof(NodeImageLayer), "node image layer");
-			sock->storage = sockdata;
-			
-			sockdata->layer_index = layer_index;
-			sockdata->pass_index = pass_index;
-		}
+	int index;
+	for (rpass=rl->passes.first, index=0; rpass; rpass=rpass->next, ++index) {
+		int type;
+		if (rpass->channels == 1)
+			type = SOCK_FLOAT;
+		else
+			type = SOCK_RGBA;
+		
+		sock = nodeAddSocket(ntree, node, SOCK_OUT, rpass->name, type);
+		/* extra socket info */
+		sockdata = MEM_callocN(sizeof(NodeImageLayer), "node image layer");
+		sock->storage = sockdata;
+		
+		sockdata->pass_index = index;
+		sockdata->pass_flag = rpass->passtype;
 	}
 }
 
@@ -189,16 +178,16 @@
 		BKE_image_get_ibuf(ima, iuser);
 		
 		if (ima->rr) {
-			if (ima->type == IMA_TYPE_MULTILAYER) {
-				cmp_node_image_add_multilayer_outputs(ntree, node, &ima->rr->layers);
-			}
-			else {
-				RenderLayer *rl= BLI_findlink(&ima->rr->layers, iuser->layer);
-				if (rl)
+			RenderLayer *rl= BLI_findlink(&ima->rr->layers, iuser->layer);
+			
+			if (rl) {
+				if (ima->type!=IMA_TYPE_MULTILAYER)
 					cmp_node_image_add_render_pass_outputs(ntree, node, rl->passflag);
 				else
-					cmp_node_image_add_render_pass_outputs(ntree, node, RRES_OUT_IMAGE|RRES_OUT_ALPHA);
+					cmp_node_image_add_multilayer_outputs(ntree, node, rl);
 			}
+			else
+				cmp_node_image_add_render_pass_outputs(ntree, node, RRES_OUT_IMAGE|RRES_OUT_ALPHA);
 		}
 		else
 			cmp_node_image_add_render_pass_outputs(ntree, node, RRES_OUT_IMAGE|RRES_OUT_ALPHA|RRES_OUT_Z);
@@ -415,28 +404,23 @@
 }
 
 /* check if layer is available, returns pass buffer */
-static CompBuf *compbuf_multilayer_get(RenderData *rd, Image *ima, ImageUser *iuser, int layer_index, int pass_index)
+static CompBuf *compbuf_multilayer_get(RenderData *rd, RenderLayer *rl, Image *ima, ImageUser *iuser, int passindex)
 {
-	RenderLayer *rl = BLI_findlink(&ima->rr->layers, layer_index);
-	if (rl) {
-		RenderPass *rpass = BLI_findlink(&rl->passes, pass_index);
-		if (rpass) {
-			CompBuf *cbuf;
-			
-			iuser->layer = layer_index;
-			iuser->pass = pass_index;
-			BKE_image_multilayer_index(ima->rr, iuser);
-			cbuf = node_composit_get_image(rd, ima, iuser);
-			
-			return cbuf;
-		}
+	RenderPass *rpass = BLI_findlink(&rl->passes, passindex);
+	if (rpass) {
+		CompBuf *cbuf;
+		
+		iuser->pass = passindex;

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list