[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33537] branches/particles-2010/source/ blender: * Added initexec and freeexec callbacks for to bNodeType, so nodes can create individual storage data in the execution stack.
Lukas Toenne
lukas.toenne at googlemail.com
Tue Dec 7 13:17:23 CET 2010
Revision: 33537
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33537
Author: lukastoenne
Date: 2010-12-07 13:17:23 +0100 (Tue, 07 Dec 2010)
Log Message:
-----------
* Added initexec and freeexec callbacks for to bNodeType, so nodes can create individual storage data in the execution stack. Used by 'For' nodes and mesh data nodes atm.
* Added back particle dynamics node (kernel still empty).
Modified Paths:
--------------
branches/particles-2010/source/blender/blenkernel/BKE_node.h
branches/particles-2010/source/blender/editors/space_node/drawnode.c
branches/particles-2010/source/blender/makesdna/DNA_node_types.h
branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
branches/particles-2010/source/blender/makesrna/intern/rna_nodetree_types.h
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_create_mesh_point.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_for.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_for_group.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_mesh_data.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_particle_dynamics.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodetree.c
branches/particles-2010/source/blender/nodes/intern/SIM_util.c
branches/particles-2010/source/blender/nodes/intern/SIM_util.h
Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h 2010-12-07 11:57:34 UTC (rev 33536)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h 2010-12-07 12:17:23 UTC (rev 33537)
@@ -135,6 +135,8 @@
/* simulation nodes */
char *(*generate_source)(struct SimNodeStack *node);
+ void (*initexec)(struct SimNodeStack *node);
+ void (*freeexec)(struct SimNodeStack *node);
void (*enqueue)(struct SimExecData *execdata, struct SimNodeStack *node, struct SimDataContext *self);
void (*enqueue_op)(struct SimExecData *execdata, struct SimNodeStack *node, struct SimDataContext *self, int execlevel, int *pushop);
} bNodeType;
Modified: branches/particles-2010/source/blender/editors/space_node/drawnode.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/drawnode.c 2010-12-07 11:57:34 UTC (rev 33536)
+++ branches/particles-2010/source/blender/editors/space_node/drawnode.c 2010-12-07 12:17:23 UTC (rev 33537)
@@ -1668,6 +1668,16 @@
uiItemR(col, ptr, "rotation_mode", 0, NULL, 0);
}
+static void node_simulation_buts_particledynamics(uiLayout *layout, bContext *C, PointerRNA *ptr)
+{
+ uiLayout *col;
+
+ node_simulation_buts_data(layout, C, ptr);
+
+ col= uiLayoutColumn(layout, 0);
+ uiItemR(col, ptr, "integration", 0, NULL, 0);
+}
+
/* only once called */
static void node_simulation_set_butfunc(bNodeType *ntype)
{
@@ -1715,6 +1725,9 @@
case SIM_NODE_CURVE:
ntype->uifunc = node_simulation_buts_curve;
break;
+ case SIM_NODE_PARTICLEDYNAMICS:
+ ntype->uifunc = node_simulation_buts_particledynamics;
+ break;
default:
ntype->uifunc= NULL;
Modified: branches/particles-2010/source/blender/makesdna/DNA_node_types.h
===================================================================
--- branches/particles-2010/source/blender/makesdna/DNA_node_types.h 2010-12-07 11:57:34 UTC (rev 33536)
+++ branches/particles-2010/source/blender/makesdna/DNA_node_types.h 2010-12-07 12:17:23 UTC (rev 33537)
@@ -457,4 +457,10 @@
#define SIM_SPACE_WORLD 0
#define SIM_SPACE_OBJECT 1
+/* particle dynamics integration mode */
+#define SIM_DYNAMICS_EULER 0
+#define SIM_DYNAMICS_VERLET 1
+#define SIM_DYNAMICS_MIDPOINT 2
+#define SIM_DYNAMICS_RK4 3
+
#endif
Modified: branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c 2010-12-07 11:57:34 UTC (rev 33536)
+++ branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c 2010-12-07 12:17:23 UTC (rev 33537)
@@ -2613,6 +2613,28 @@
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_rotation_mode_update");
}
+static void def_sim_particledynamics(StructRNA *srna)
+{
+ PropertyRNA *prop;
+
+ static EnumPropertyItem sim_integration_items[] = {
+ { SIM_DYNAMICS_EULER, "EULER", 0, "Euler", "" },
+ { SIM_DYNAMICS_VERLET, "VERLET", 0, "Verlet", "" },
+ { SIM_DYNAMICS_MIDPOINT, "MIDPOINT", 0, "Midpoint", "" },
+ { SIM_DYNAMICS_RK4, "RK4", 0, "RK4", "" },
+ { -1, "", 0, NULL, NULL },
+ };
+
+ prop = RNA_def_property(srna, "integration", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "custom1");
+ RNA_def_property_enum_items(prop, sim_integration_items);
+ RNA_def_property_enum_default(prop, SIM_DYNAMICS_RK4);
+ RNA_def_property_ui_text(prop, "Integration", "Integration mode for a dynamics step");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ def_sim_data(srna);
+}
+
/* -------------------------------------------------------------------------- */
static EnumPropertyItem shader_node_type_items[MaxNodes];
Modified: branches/particles-2010/source/blender/makesrna/intern/rna_nodetree_types.h
===================================================================
--- branches/particles-2010/source/blender/makesrna/intern/rna_nodetree_types.h 2010-12-07 11:57:34 UTC (rev 33536)
+++ branches/particles-2010/source/blender/makesrna/intern/rna_nodetree_types.h 2010-12-07 12:17:23 UTC (rev 33537)
@@ -172,7 +172,7 @@
DefNode( SimulationNode, SIM_NODE_ADDPARTICLE, def_sim_data, "ADDPARTICLE", AddParticle, "Add Particle", "" )
DefNode( SimulationNode, SIM_NODE_RANDOM, def_sim_random, "RANDOM", Random, "Random", "" )
DefNode( SimulationNode, SIM_NODE_CREATEMESHPOINT, def_sim_data, "CREATEMESHPOINT", CreateMeshPoint, "CreateMeshPoint", "" )
-DefNode( SimulationNode, SIM_NODE_PARTICLEDYNAMICS, 0, "PARTICLEDYNAMICS", ParticleDynamics, "Particle Dynamics", "" )
+DefNode( SimulationNode, SIM_NODE_PARTICLEDYNAMICS, def_sim_particledynamics, "PARTICLEDYNAMICS", ParticleDynamics, "Particle Dynamics", "" )
DefNode( SimulationNode, SIM_NODE_ADDPARTICLEFORCE, 0, "ADDPARTICLEFORCE", AddParticleForce, "Add Particle Force", "" )
DefNode( SimulationNode, SIM_NODE_TIMESTEP, 0, "TIMESTEP", TimeStep, "Time Step", "" )
DefNode( SimulationNode, SIM_NODE_CURVE, def_sim_curve, "CURVE", Curve, "Curve", "" )
Modified: branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_create_mesh_point.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_create_mesh_point.c 2010-12-07 11:57:34 UTC (rev 33536)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_create_mesh_point.c 2010-12-07 12:17:23 UTC (rev 33537)
@@ -33,6 +33,7 @@
#include "DNA_node_types.h"
#include "DNA_particleset_types.h"
+#include "BKE_cdderivedmesh.h"
#include "BKE_DerivedMesh.h"
#include "BKE_main.h"
#include "BKE_node.h"
@@ -57,6 +58,28 @@
sim_datanode_init(node, &RNA_Object);
}
+typedef struct ExecStorage {
+ struct DerivedMesh *dm;
+} ExecStorage;
+
+static void initexec(SimNodeStack *node)
+{
+ node->storage = MEM_callocN(sizeof(ExecStorage), "ExecStorage");
+}
+
+static void freeexec(SimNodeStack *node)
+{
+ ExecStorage *storage= (ExecStorage*)node->storage;
+
+ if (storage->dm) {
+ storage->dm->needsFree = 1;
+ storage->dm->release(storage->dm);
+ storage->dm = NULL;
+ }
+
+ MEM_freeN(storage);
+}
+
static void kernel_createmeshpoint(int global_id, void **args, SimNodeStack *node)
{
// Object *ob= *(Object**)args[0];
@@ -83,16 +106,31 @@
static void enqueue(SimExecData *execdata, SimNodeStack *node, SimDataContext *self)
{
+ ExecStorage *storage= (ExecStorage*)node->storage;
SimDataContext ctx;
+ if (storage->dm) {
+ storage->dm->needsFree = 1;
+ storage->dm->release(storage->dm);
+ storage->dm = NULL;
+ }
+
if (sim_datanode_resolve_context(node->base, self, &ctx)) {
Object *ob= (Object*)sim_context_data(&ctx);
DerivedMesh *dm;
SimKernel *kernel;
- /* get the derived mesh */
+ /* get the derived mesh and make a copy */
dm = mesh_get_derived_final(ctx.scene, ob, CD_MASK_MFACE | CD_MASK_ORCO);
- if (dm) {
+ storage->dm=CDDM_copy(dm);
+// CDDM_apply_vert_coords(storage->dm, vertexCos);
+// CDDM_calc_normals(storage->dm);
+// dm->needsFree = 1;
+// dm->release(storage->dm);
+// dm = NULL;
+ storage->dm->needsFree = 0;
+
+ if (storage->dm) {
int totfaces, totverts;
MFace *mf;
float *orco;
@@ -110,16 +148,16 @@
sim_kernel_set_arg(execdata, kernel, 0, sizeof(Object*), ob);
- totfaces = dm->getNumFaces(dm);
+ totfaces = storage->dm->getNumFaces(storage->dm);
sim_kernel_set_arg(execdata, kernel, 1, sizeof(int), &totfaces);
- totverts = dm->getNumVerts(dm);
+ totverts = storage->dm->getNumVerts(storage->dm);
sim_kernel_set_arg(execdata, kernel, 2, sizeof(int), &totverts);
- mf = dm->getFaceDataArray(dm, CD_MFACE);
+ mf = storage->dm->getFaceDataArray(storage->dm, CD_MFACE);
sim_kernel_set_arg(execdata, kernel, 3, sizeof(MFace*), &mf);
- orco = (float*)dm->getVertDataArray(dm, CD_ORCO);
+ orco = (float*)storage->dm->getVertDataArray(storage->dm, CD_ORCO);
sim_kernel_set_arg(execdata, kernel, 4, sizeof(float*), &orco);
sim_kernel_enqueue(execdata, kernel);
@@ -150,6 +188,9 @@
type.freestoragefunc = node_free_standard_storage;
type.copystoragefunc = node_copy_standard_storage;
+ type.initexec = initexec;
+ type.freeexec = freeexec;
+
type.enqueue = enqueue;
nodeRegisterType(typelist, &type);
Modified: branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_for.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_for.c 2010-12-07 11:57:34 UTC (rev 33536)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_for.c 2010-12-07 12:17:23 UTC (rev 33537)
@@ -45,27 +45,32 @@
int iterations;
} OpStorage;
+static void initexec(SimNodeStack *node)
+{
+ node->storage = MEM_callocN(sizeof(OpStorage), "OpStorage");
+}
+
+static void freeexec(SimNodeStack *node)
+{
+ OpStorage *storage = (OpStorage*)node->storage;
+
+ MEM_freeN(storage);
+}
+
static void enqueue_op(SimExecData *execdata, SimNodeStack *node, SimDataContext *self, int execlevel, int *pushop)
{
- OpStorage *storage;
+ OpStorage *storage= (OpStorage*)node->storage;
SimSocketIterator sockiter;
if (execlevel == 0) {
- node->opstorage = storage = MEM_callocN(sizeof(OpStorage), "NodeOperatorStorage");
-
sim_input_begin(execdata, &sockiter, node->instack[0]);
sim_input_read_int(execdata, &sockiter, &storage->iterations);
sim_input_end(execdata, &sockiter);
if (execdata->error) return;
}
- else
- storage = (OpStorage*)node->opstorage;
if (execlevel < storage->iterations)
*pushop = 1;
- else {
- MEM_freeN(storage);
- }
}
void nodeRegisterSimFor(ListBase *typelist)
@@ -84,6 +89,10 @@
/* optional */
type.inputs = inputs;
type.outputs = outputs;
+
+ type.initexec = initexec;
+ type.freeexec = freeexec;
+
type.enqueue_op = enqueue_op;
nodeRegisterType(typelist, &type);
Modified: branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_for_group.c
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list