[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32656] branches/particles-2010/source/ blender: Registration for node types now uses functions instead of direct definition struct access .

Lukas Toenne lukas.toenne at googlemail.com
Fri Oct 22 17:09:30 CEST 2010


Revision: 32656
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32656
Author:   lukastoenne
Date:     2010-10-22 17:09:30 +0200 (Fri, 22 Oct 2010)

Log Message:
-----------
Registration for node types now uses functions instead of direct definition struct access. This way a long list of NULL pointers can be avoided and callbacks can be added, removed and modified without having to update each and every node definition file, but only those that are actually affected.

Modified Paths:
--------------
    branches/particles-2010/source/blender/blenkernel/BKE_node.h
    branches/particles-2010/source/blender/blenkernel/intern/node.c
    branches/particles-2010/source/blender/makesdna/DNA_node_types.h
    branches/particles-2010/source/blender/nodes/SIM_node.h
    branches/particles-2010/source/blender/nodes/intern/simulation/node_tree_simulation.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_add_particle.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_add_particle_force.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_debugprint.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_filter.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_for.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_for_group.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_get_data.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_if.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_math.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_particle_dynamics.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_pass.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_program.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_random.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_set_data.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_subprogram.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_timestep.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_vectormath.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_while.c

Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h	2010-10-22 14:04:54 UTC (rev 32655)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h	2010-10-22 15:09:30 UTC (rev 32656)
@@ -116,6 +116,8 @@
 
 	/* called when the node is updated (e.g. linked) in the editor. */
 	void (*updatefunc)(struct bNodeTree *ntree, struct bNode *node);
+	/* called to (partially) determine self-context at build time */
+	void (*updatecontextfunc)(struct SimDataContext *ctx);
 
 	char socketstoragename[64];		/* socket storage struct name for DNA */
 	void (*initsocketfunc)(struct bNodeSocket *sock);

Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c	2010-10-22 14:04:54 UTC (rev 32655)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c	2010-10-22 15:09:30 UTC (rev 32656)
@@ -2358,48 +2358,48 @@
 {
 	nodeRegisterType(ntypelist, &node_group_typeinfo);
 
-	nodeRegisterType(ntypelist, &sim_node_program);
-	nodeRegisterType(ntypelist, &sim_node_subprogram);
-	nodeRegisterType(ntypelist, &sim_node_pass);
-	nodeRegisterType(ntypelist, &sim_node_if);
-	nodeRegisterType(ntypelist, &sim_node_for);
-	nodeRegisterType(ntypelist, &sim_node_while);
-	nodeRegisterType(ntypelist, &sim_node_filter);
-	nodeRegisterType(ntypelist, &sim_node_for_group);
+	nodeRegisterSimProgram(ntypelist);
+	nodeRegisterSimSubProgram(ntypelist);
+	nodeRegisterSimPass(ntypelist);
+	nodeRegisterSimIf(ntypelist);
+	nodeRegisterSimFor(ntypelist);
+	nodeRegisterSimWhile(ntypelist);
+	nodeRegisterSimFilter(ntypelist);
+	nodeRegisterSimForGroup(ntypelist);
 
-	nodeRegisterType(ntypelist, &sim_node_add);
-	nodeRegisterType(ntypelist, &sim_node_subtract);
-	nodeRegisterType(ntypelist, &sim_node_multiply);
-	nodeRegisterType(ntypelist, &sim_node_divide);
-	nodeRegisterType(ntypelist, &sim_node_sine);
-	nodeRegisterType(ntypelist, &sim_node_cosine);
-	nodeRegisterType(ntypelist, &sim_node_tangent);
-	nodeRegisterType(ntypelist, &sim_node_arcsine);
-	nodeRegisterType(ntypelist, &sim_node_arccosine);
-	nodeRegisterType(ntypelist, &sim_node_arctangent);
-	nodeRegisterType(ntypelist, &sim_node_power);
-	nodeRegisterType(ntypelist, &sim_node_logarithm);
-	nodeRegisterType(ntypelist, &sim_node_minimum);
-	nodeRegisterType(ntypelist, &sim_node_maximum);
-	nodeRegisterType(ntypelist, &sim_node_round);
-	nodeRegisterType(ntypelist, &sim_node_lessthan);
-	nodeRegisterType(ntypelist, &sim_node_greaterthan);
+	nodeRegisterSimAdd(ntypelist);
+	nodeRegisterSimSubtract(ntypelist);
+	nodeRegisterSimMultiply(ntypelist);
+	nodeRegisterSimDivide(ntypelist);
+	nodeRegisterSimSine(ntypelist);
+	nodeRegisterSimCosine(ntypelist);
+	nodeRegisterSimTangent(ntypelist);
+	nodeRegisterSimArcsine(ntypelist);
+	nodeRegisterSimArccosine(ntypelist);
+	nodeRegisterSimArctangent(ntypelist);
+	nodeRegisterSimPower(ntypelist);
+	nodeRegisterSimLogarithm(ntypelist);
+	nodeRegisterSimMinimum(ntypelist);
+	nodeRegisterSimMaximum(ntypelist);
+	nodeRegisterSimRound(ntypelist);
+	nodeRegisterSimLessThan(ntypelist);
+	nodeRegisterSimGreaterThan(ntypelist);
 
-	nodeRegisterType(ntypelist, &sim_node_vector_compose);
-	nodeRegisterType(ntypelist, &sim_node_vector_decompose);
-	nodeRegisterType(ntypelist, &sim_node_vectorlength);
-	nodeRegisterType(ntypelist, &sim_node_dotproduct);
-	nodeRegisterType(ntypelist, &sim_node_crossproduct);
+	nodeRegisterSimVectorCompose(ntypelist);
+	nodeRegisterSimVectorDecompose(ntypelist);
+	nodeRegisterSimVectorLength(ntypelist);
+	nodeRegisterSimDotProduct(ntypelist);
+	nodeRegisterSimCrossProduct(ntypelist);
 
-	nodeRegisterType(ntypelist, &sim_node_getdata);
-	nodeRegisterType(ntypelist, &sim_node_setdata);
-	nodeRegisterType(ntypelist, &sim_node_timestep);
-	nodeRegisterType(ntypelist, &sim_node_addparticle);
-	nodeRegisterType(ntypelist, &sim_node_random);
-	nodeRegisterType(ntypelist, &sim_node_particledynamics);
-	nodeRegisterType(ntypelist, &sim_node_addparticleforce);
+	nodeRegisterSimGetData(ntypelist);
+	nodeRegisterSimSetData(ntypelist);
+	nodeRegisterSimTimeStep(ntypelist);
+	nodeRegisterSimRandom(ntypelist);
+	nodeRegisterSimDebugPrint(ntypelist);
 
-	nodeRegisterType(ntypelist, &sim_node_debugprint);
+	nodeRegisterSimAddParticle(ntypelist);
+	nodeRegisterSimAddParticleForce(ntypelist);
+	nodeRegisterSimParticleDynamics(ntypelist);
 }
 
 static void remove_dynamic_typeinfos(ListBase *list)

Modified: branches/particles-2010/source/blender/makesdna/DNA_node_types.h
===================================================================
--- branches/particles-2010/source/blender/makesdna/DNA_node_types.h	2010-10-22 14:04:54 UTC (rev 32655)
+++ branches/particles-2010/source/blender/makesdna/DNA_node_types.h	2010-10-22 15:09:30 UTC (rev 32656)
@@ -178,6 +178,7 @@
 	
 	struct bNodeType *typeinfo;	/* lookup of callbacks and defaults */
 	
+	struct SimDataContext *self_context;	/* self context, as far as known at build time */
 } bNode;
 
 /* node->flag */

Modified: branches/particles-2010/source/blender/nodes/SIM_node.h
===================================================================
--- branches/particles-2010/source/blender/nodes/SIM_node.h	2010-10-22 14:04:54 UTC (rev 32655)
+++ branches/particles-2010/source/blender/nodes/SIM_node.h	2010-10-22 15:09:30 UTC (rev 32656)
@@ -39,47 +39,47 @@
 
 /* ****************** types array for all simulation nodes ****************** */
 
-extern bNodeType sim_node_program;
-extern bNodeType sim_node_subprogram;
-extern bNodeType sim_node_pass;
-extern bNodeType sim_node_if;
-extern bNodeType sim_node_for;
-extern bNodeType sim_node_while;
-extern bNodeType sim_node_filter;
-extern bNodeType sim_node_for_group;
+void nodeRegisterSimProgram(struct ListBase *typelist);
+void nodeRegisterSimSubProgram(struct ListBase *typelist);
+void nodeRegisterSimPass(struct ListBase *typelist);
+void nodeRegisterSimIf(struct ListBase *typelist);
+void nodeRegisterSimFor(struct ListBase *typelist);
+void nodeRegisterSimWhile(struct ListBase *typelist);
+void nodeRegisterSimFilter(struct ListBase *typelist);
+void nodeRegisterSimForGroup(struct ListBase *typelist);
 
-extern bNodeType sim_node_add;
-extern bNodeType sim_node_subtract;
-extern bNodeType sim_node_multiply;
-extern bNodeType sim_node_divide;
-extern bNodeType sim_node_sine;
-extern bNodeType sim_node_cosine;
-extern bNodeType sim_node_tangent;
-extern bNodeType sim_node_arcsine;
-extern bNodeType sim_node_arccosine;
-extern bNodeType sim_node_arctangent;
-extern bNodeType sim_node_power;
-extern bNodeType sim_node_logarithm;
-extern bNodeType sim_node_minimum;
-extern bNodeType sim_node_maximum;
-extern bNodeType sim_node_round;
-extern bNodeType sim_node_lessthan;
-extern bNodeType sim_node_greaterthan;
+void nodeRegisterSimAdd(struct ListBase *typelist);
+void nodeRegisterSimSubtract(struct ListBase *typelist);
+void nodeRegisterSimMultiply(struct ListBase *typelist);
+void nodeRegisterSimDivide(struct ListBase *typelist);
+void nodeRegisterSimSine(struct ListBase *typelist);
+void nodeRegisterSimCosine(struct ListBase *typelist);
+void nodeRegisterSimTangent(struct ListBase *typelist);
+void nodeRegisterSimArcsine(struct ListBase *typelist);
+void nodeRegisterSimArccosine(struct ListBase *typelist);
+void nodeRegisterSimArctangent(struct ListBase *typelist);
+void nodeRegisterSimPower(struct ListBase *typelist);
+void nodeRegisterSimLogarithm(struct ListBase *typelist);
+void nodeRegisterSimMinimum(struct ListBase *typelist);
+void nodeRegisterSimMaximum(struct ListBase *typelist);
+void nodeRegisterSimRound(struct ListBase *typelist);
+void nodeRegisterSimLessThan(struct ListBase *typelist);
+void nodeRegisterSimGreaterThan(struct ListBase *typelist);
 
-extern bNodeType sim_node_vector_compose;
-extern bNodeType sim_node_vector_decompose;
-extern bNodeType sim_node_vectorlength;
-extern bNodeType sim_node_dotproduct;
-extern bNodeType sim_node_crossproduct;
+void nodeRegisterSimVectorCompose(struct ListBase *typelist);
+void nodeRegisterSimVectorDecompose(struct ListBase *typelist);
+void nodeRegisterSimVectorLength(struct ListBase *typelist);
+void nodeRegisterSimDotProduct(struct ListBase *typelist);
+void nodeRegisterSimCrossProduct(struct ListBase *typelist);
 
-extern bNodeType sim_node_getdata;
-extern bNodeType sim_node_setdata;
-extern bNodeType sim_node_timestep;
-extern bNodeType sim_node_addparticle;
-extern bNodeType sim_node_random;
-extern bNodeType sim_node_particledynamics;
-extern bNodeType sim_node_addparticleforce;
+void nodeRegisterSimGetData(struct ListBase *typelist);
+void nodeRegisterSimSetData(struct ListBase *typelist);
+void nodeRegisterSimTimeStep(struct ListBase *typelist);
+void nodeRegisterSimRandom(struct ListBase *typelist);
+void nodeRegisterSimDebugPrint(struct ListBase *typelist);
 
-extern bNodeType sim_node_debugprint;
+void nodeRegisterSimAddParticle(struct ListBase *typelist);
+void nodeRegisterSimAddParticleForce(struct ListBase *typelist);
+void nodeRegisterSimParticleDynamics(struct ListBase *typelist);
 
 #endif

Modified: branches/particles-2010/source/blender/nodes/intern/simulation/node_tree_simulation.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/simulation/node_tree_simulation.c	2010-10-22 14:04:54 UTC (rev 32655)
+++ branches/particles-2010/source/blender/nodes/intern/simulation/node_tree_simulation.c	2010-10-22 15:09:30 UTC (rev 32656)
@@ -350,8 +350,88 @@
 	}
 }
 
-#ifdef WITH_OPENCL
+static void update_recursive(bNodeTree *ntree)
+{
+	bNode *node;
+	
+	/* update nested trees recursively */
+	for (node=ntree->nodes.first; node; node = node->next) {
+		if (node->type == NODE_GROUP && node->id && (((bNodeTree*)node->id)->flag & NTREE_UPDATE) != 0)
+			update_recursive((bNodeTree*)node->id);
+	}
+	
+	ntreeSolveNodeOrder(ntree);
 
+	/* Note: The resolve function accesses lower-level trees.
+	 * They have to be recalculated for each tree up in the hierarchy,
+	 * because the result on higher levels may differ from local level result.
+	 */
+	resolve_socket_types(ntree);
+
+	ntreeValidateLinks(ntree);
+	
+	ntree->flag &= ~NTREE_UPDATE;
+}
+
+static void update(bNodeTree *ntree)
+{

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list