[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51576] trunk/blender/source/blender: Removed the experimental (and commented-out) code for FOR and WHILE loops in nodes.

Lukas Toenne lukas.toenne at googlemail.com
Wed Oct 24 12:00:29 CEST 2012


Revision: 51576
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51576
Author:   lukastoenne
Date:     2012-10-24 10:00:28 +0000 (Wed, 24 Oct 2012)
Log Message:
-----------
Removed the experimental (and commented-out) code for FOR and WHILE loops in nodes. This was a feature i tested a while back but was only partially supported by Blender Internal renderer and the old compositor. The main idea was to have nodes that automatically mirror input and output sockets to support incremental changes of "internal variables".

It is not a well-supported feature of the primary node systems (shader, compositor, texture) in Blender. If anybody wants to create a node system that has actual use for loops, they can do so much more elegantly with Python nodes, but it does not have to be a core node type in Blender. Removing this should ease node code maintenance a bit.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/editors/space_node/drawnode.c
    trunk/blender/source/blender/editors/space_node/node_header.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/nodes/composite/nodes/node_composite_common.c
    trunk/blender/source/blender/nodes/intern/node_common.c
    trunk/blender/source/blender/nodes/intern/node_common.h
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_common.c
    trunk/blender/source/blender/nodes/texture/nodes/node_texture_common.c

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h	2012-10-24 09:33:29 UTC (rev 51575)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h	2012-10-24 10:00:28 UTC (rev 51576)
@@ -456,8 +456,8 @@
 /* ************** COMMON NODES *************** */
 
 #define NODE_GROUP		2
-#define NODE_FORLOOP	3
-#define NODE_WHILELOOP	4
+#define __NODE_FORLOOP	3	/* deprecated */
+#define __NODE_WHILELOOP	4	/* deprecated */
 #define NODE_FRAME		5
 #define NODE_REROUTE	6
 

Modified: trunk/blender/source/blender/editors/space_node/drawnode.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/drawnode.c	2012-10-24 09:33:29 UTC (rev 51575)
+++ trunk/blender/source/blender/editors/space_node/drawnode.c	2012-10-24 10:00:28 UTC (rev 51576)
@@ -895,11 +895,6 @@
 	uiTemplateIDBrowse(layout, C, ptr, "node_tree", NULL, NULL, NULL);
 }
 
-static void node_common_buts_whileloop(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
-{
-	uiItemR(layout, ptr, "max_iterations", 0, NULL, ICON_NONE);
-}
-
 /* XXX Does a bounding box update by iterating over all children.
  * Not ideal to do this in every draw call, but doing as transform callback doesn't work,
  * since the child node totr rects are not updated properly at that point.
@@ -1179,16 +1174,6 @@
 			ntype->drawfunc = node_draw_group;
 			ntype->drawupdatefunc = node_update_group;
 			break;
-		case NODE_FORLOOP:
-//			ntype->uifunc= node_common_buts_group;
-			ntype->drawfunc = node_draw_group;
-			ntype->drawupdatefunc = node_update_group;
-			break;
-		case NODE_WHILELOOP:
-			ntype->uifunc = node_common_buts_whileloop;
-			ntype->drawfunc = node_draw_group;
-			ntype->drawupdatefunc = node_update_group;
-			break;
 		case NODE_FRAME:
 			ntype->drawfunc = node_draw_frame;
 			ntype->drawupdatefunc = node_update_frame;

Modified: trunk/blender/source/blender/editors/space_node/node_header.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_header.c	2012-10-24 09:33:29 UTC (rev 51575)
+++ trunk/blender/source/blender/editors/space_node/node_header.c	2012-10-24 10:00:28 UTC (rev 51576)
@@ -138,12 +138,6 @@
 			case NODE_GROUP:
 				ntemp.ngroup = ntreeAddTree("Group", snode->treetype, ntemp.type);
 				break;
-			case NODE_FORLOOP:
-				ntemp.ngroup = ntreeAddTree("For Loop", snode->treetype, ntemp.type);
-				break;
-			case NODE_WHILELOOP:
-				ntemp.ngroup = ntreeAddTree("While Loop", snode->treetype, ntemp.type);
-				break;
 			default:
 				ntemp.ngroup = NULL;
 		}
@@ -199,15 +193,11 @@
 		/* XXX hack: negative numbers used for empty group types */
 		if (node_tree_has_type(ntree->type, NODE_GROUP))
 			uiItemV(layout, IFACE_("New Group"), 0, -NODE_GROUP);
-		if (node_tree_has_type(ntree->type, NODE_FORLOOP))
-			uiItemV(layout, IFACE_("New For Loop"), 0, -NODE_FORLOOP);
-		if (node_tree_has_type(ntree->type, NODE_WHILELOOP))
-			uiItemV(layout, IFACE_("New While Loop"), 0, -NODE_WHILELOOP);
 		uiItemS(layout);
 		
 		for (ngroup = bmain->nodetree.first, event = 0; ngroup; ngroup = ngroup->id.next, ++event) {
 			/* only use group trees */
-			if (ngroup->type == ntree->type && ELEM3(ngroup->nodetype, NODE_GROUP, NODE_FORLOOP, NODE_WHILELOOP)) {
+			if (ngroup->type == ntree->type && ngroup->nodetype == NODE_GROUP) {
 				uiItemV(layout, ngroup->id.name + 2, 0, event);
 			}
 		}

Modified: trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2012-10-24 09:33:29 UTC (rev 51575)
+++ trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2012-10-24 10:00:28 UTC (rev 51576)
@@ -226,10 +226,6 @@
 		
 		case NODE_GROUP:
 			return &RNA_NodeGroup;
-		case NODE_FORLOOP:
-			return &RNA_NodeForLoop;
-		case NODE_WHILELOOP:
-			return &RNA_NodeWhileLoop;
 		case NODE_FRAME:
 			return &RNA_NodeFrame;
 		case NODE_REROUTE:
@@ -1042,7 +1038,6 @@
 enum
 {
 	Category_GroupNode,
-	Category_LoopNode,
 	Category_LayoutNode,
 	Category_ShaderNode,
 	Category_CompositorNode,
@@ -1086,8 +1081,6 @@
 	#include "rna_nodetree_types.h"
 	
 	reg_node(NODE_GROUP, Category_GroupNode, "GROUP", "NodeGroup", "SpecialNode", "Group", "");
-	reg_node(NODE_FORLOOP, Category_LoopNode, "FORLOOP", "NodeForLoop", "SpecialNode", "ForLoop", "");
-	reg_node(NODE_WHILELOOP, Category_LoopNode, "WHILELOOP", "NodeWhileLoop", "SpecialNode", "WhileLoop", "");
 	reg_node(NODE_FRAME, Category_LayoutNode, "FRAME", "NodeFrame", "SpecialNode", "Frame", "");
 	reg_node(NODE_REROUTE, Category_LayoutNode, "REROUTE", "NodeReroute", "SpecialNode", "Reroute", "");
 }
@@ -1166,36 +1159,6 @@
 	RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeGroup_update");
 }
 
-static void def_forloop(StructRNA *srna)
-{
-	PropertyRNA *prop;
-	
-	prop = RNA_def_property(srna, "node_tree", PROP_POINTER, PROP_NONE);
-	RNA_def_property_pointer_sdna(prop, NULL, "id");
-	RNA_def_property_struct_type(prop, "NodeTree");
-	RNA_def_property_flag(prop, PROP_EDITABLE);
-	RNA_def_property_ui_text(prop, "Node Tree", "");
-	RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeGroup_update");
-}
-
-static void def_whileloop(StructRNA *srna)
-{
-	PropertyRNA *prop;
-	
-	prop = RNA_def_property(srna, "node_tree", PROP_POINTER, PROP_NONE);
-	RNA_def_property_pointer_sdna(prop, NULL, "id");
-	RNA_def_property_struct_type(prop, "NodeTree");
-	RNA_def_property_flag(prop, PROP_EDITABLE);
-	RNA_def_property_ui_text(prop, "Node Tree", "");
-	RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeGroup_update");
-
-	prop = RNA_def_property(srna, "max_iterations", PROP_INT, PROP_NONE);
-	RNA_def_property_int_sdna(prop, NULL, "custom1");
-	RNA_def_property_range(prop, 0.0f, SHRT_MAX);
-	RNA_def_property_ui_text(prop, "Max. Iterations", "Limit for number of iterations");
-	RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeGroup_update");
-}
-
 static void def_frame(StructRNA *srna)
 {
 	PropertyRNA *prop; 
@@ -3995,8 +3958,6 @@
 
 	static EnumPropertyItem specific_node_type_items[] = {
 		{NODE_GROUP, "GROUP", ICON_NODE, "Group", ""},
-		{NODE_FORLOOP, "FORLOOP", ICON_NODE, "For Loop", ""},
-		{NODE_WHILELOOP, "WHILELOOP", ICON_NODE, "While Loop", ""},
 		{NODE_FRAME, "FRAME", ICON_NODE, "Frame", ""},
 		{NODE_REROUTE, "REROUTE", ICON_NODE, "Reroute", ""},
 		{0, NULL, 0, NULL, NULL}
@@ -4619,8 +4580,6 @@
 	#include "rna_nodetree_types.h"
 	
 	define_specific_node(brna, NODE_GROUP, def_group);
-	define_specific_node(brna, NODE_FORLOOP, def_forloop);
-	define_specific_node(brna, NODE_WHILELOOP, def_whileloop);
 	define_specific_node(brna, NODE_FRAME, def_frame);
 	define_specific_node(brna, NODE_REROUTE, 0);
 	

Modified: trunk/blender/source/blender/nodes/composite/nodes/node_composite_common.c
===================================================================
--- trunk/blender/source/blender/nodes/composite/nodes/node_composite_common.c	2012-10-24 09:33:29 UTC (rev 51575)
+++ trunk/blender/source/blender/nodes/composite/nodes/node_composite_common.c	2012-10-24 10:00:28 UTC (rev 51576)
@@ -231,153 +231,3 @@
 
 	nodeRegisterType(ttype, &ntype);
 }
-
-#ifdef WITH_COMPOSITOR_LEGACY
-
-/**** FOR LOOP ****/
-
-#if 0 /* XXX loop nodes don't work nicely with current trees */
-/* Move the results from the previous iteration back to the input sockets. */
-static void loop_iteration_reset(bNodeTree *ngroup, bNodeStack *gstack)
-{
-	bNodeSocket *gin, *gout;
-	bNodeStack *nsin, *nsout;
-	
-	gin = ngroup->inputs.first;
-	gout = ngroup->outputs.first;
-	
-	while (gin && gout) {
-		/* skip static (non-looping) sockets */
-		while (gin && !(gin->flag & SOCK_DYNAMIC))
-			gin=gin->next;
-		while (gout && !(gout->flag & SOCK_DYNAMIC))
-			gout=gout->next;
-		
-		if (gin && gout) {
-			nsin = node_get_socket_stack(gstack, gin);
-			nsout = node_get_socket_stack(gstack, gout);
-			
-			move_stack(nsin, nsout);
-			
-			gin=gin->next;
-			gout=gout->next;
-		}
-	}
-}
-
-static void forloop_execute(void *data, int thread, struct bNode *node, void *nodedata, struct bNodeStack **in, struct bNodeStack **out)
-{
-	bNodeTreeExec *exec= (bNodeTreeExec *)nodedata;
-	int totiterations= (int)in[0]->vec[0];
-	bNodeSocket *sock;
-	bNodeStack *ns;
-	int iteration;
-	
-	/* XXX same behavior as trunk: all nodes inside group are executed.
-	 * it's stupid, but just makes it work. compo redesign will do this better.
-	 */
-	{
-		bNode *inode;
-		for (inode=exec->nodetree->nodes.first; inode; inode=inode->next)
-			inode->need_exec = 1;
-	}
-	
-	/* "Iteration" socket */
-	sock = exec->nodetree->inputs.first;
-	ns = node_get_socket_stack(exec->stack, sock);
-	
-	group_copy_inputs(node, in, exec->stack);
-	for (iteration=0; iteration < totiterations; ++iteration) {
-		/* first input contains current iteration counter */
-		ns->vec[0] = (float)iteration;
-		
-		if (iteration > 0)
-			loop_iteration_reset(exec->nodetree, exec->stack);
-		ntreeExecNodes(exec, data, thread);
-		group_free_internal(exec);
-	}
-	group_move_outputs(node, out, exec->stack);
-}
-
-void register_node_type_cmp_forloop(bNodeTreeType *ttype)
-{
-	static bNodeType ntype;
-
-	node_type_base(ttype, &ntype, NODE_FORLOOP, "For", NODE_CLASS_GROUP, NODE_OPTIONS);
-	node_type_socket_templates(&ntype, NULL, NULL);
-	node_type_size(&ntype, 120, 60, 200);
-	node_type_label(&ntype, node_group_label);
-	node_type_init(&ntype, node_forloop_init);
-	node_type_valid(&ntype, node_group_valid);
-	node_type_template(&ntype, node_forloop_template);
-	node_type_update(&ntype, NULL, node_group_verify);
-	node_type_tree(&ntype, node_forloop_init_tree, node_loop_update_tree);
-	node_type_group_edit(&ntype, node_group_edit_get, node_group_edit_set, node_group_edit_clear);
-	node_type_exec_new(&ntype, group_initexec, group_freeexec, forloop_execute);
-	
-	nodeRegisterType(ttype, &ntype);
-}
-#endif
-
-
-/**** WHILE LOOP ****/
-
-#if 0 /* XXX loop nodes don't work nicely with current trees */
-static void whileloop_execute(void *data, int thread, struct bNode *node, void *nodedata, struct bNodeStack **in, struct bNodeStack **out)
-{
-	bNodeTreeExec *exec= (bNodeTreeExec *)nodedata;
-	int condition= (in[0]->vec[0] > 0.0f);
-	bNodeSocket *sock;
-	bNodeStack *ns;
-	int iteration;
-	

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list