[Bf-blender-cvs] [72913dbafc3] functions: initial process node interface

Jacques Lucke noreply at git.blender.org
Tue Jul 9 18:01:29 CEST 2019


Commit: 72913dbafc33f4134c7cf6cc915a341ea1e54a98
Author: Jacques Lucke
Date:   Tue Jul 9 12:55:15 2019 +0200
Branches: functions
https://developer.blender.org/rB72913dbafc33f4134c7cf6cc915a341ea1e54a98

initial process node interface

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

M	source/blender/simulations/bparticles/inserters.cpp
M	source/blender/simulations/bparticles/inserters.hpp
M	source/blender/simulations/bparticles/node_frontend.cpp

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

diff --git a/source/blender/simulations/bparticles/inserters.cpp b/source/blender/simulations/bparticles/inserters.cpp
index 7e900bc568d..9de26132506 100644
--- a/source/blender/simulations/bparticles/inserters.cpp
+++ b/source/blender/simulations/bparticles/inserters.cpp
@@ -3,6 +3,7 @@
 #include "FN_tuple_call.hpp"
 
 #include "BLI_timeit.hpp"
+#include "BLI_lazy_init.hpp"
 
 #include "inserters.hpp"
 #include "core.hpp"
@@ -37,11 +38,6 @@ static bool is_particle_data_input(bNode *bnode)
          STREQ(bnode->idname, "bp_MeshCollisionEventNode");
 }
 
-static ArrayRef<bNode *> get_particle_type_nodes(IndexedNodeTree &indexed_tree)
-{
-  return indexed_tree.nodes_with_idname("bp_ParticleTypeNode");
-}
-
 static SmallVector<FN::DFGraphSocket> insert_inputs(FN::FunctionBuilder &fn_builder,
                                                     IndexedNodeTree &indexed_tree,
                                                     FN::DataFlowNodes::GeneratedGraph &data_graph,
@@ -178,15 +174,13 @@ static std::unique_ptr<Action> build_action(SocketWithNode start,
   }
 }
 
-static void INSERT_EMITTER_mesh_surface(bNode *emitter_node,
-                                        IndexedNodeTree &indexed_tree,
-                                        FN::DataFlowNodes::GeneratedGraph &UNUSED(data_graph),
-                                        ModifierStepDescription &step_description,
-                                        WorldState &world_state)
+static void INSERT_EMITTER_mesh_surface(ProcessNodeInterface &interface)
 {
-  BLI_assert(STREQ(emitter_node->idname, "bp_MeshEmitterNode"));
+  bNode *emitter_node = interface.bnode();
+  IndexedNodeTree &indexed_tree = interface.indexed_tree();
+
   bNodeSocket *emitter_output = (bNodeSocket *)emitter_node->outputs.first;
-  for (SocketWithNode linked : indexed_tree.linked(emitter_output)) {
+  for (SocketWithNode linked : interface.indexed_tree().linked(emitter_output)) {
     if (!is_particle_type_node(linked.node)) {
       continue;
     }
@@ -200,202 +194,151 @@ static void INSERT_EMITTER_mesh_surface(bNode *emitter_node,
       continue;
     }
 
-    float4x4 last_transformation = world_state.update(emitter_node->name, object->obmat);
+    float4x4 last_transformation = interface.world_state().update(emitter_node->name,
+                                                                  object->obmat);
     float4x4 current_transformation = object->obmat;
 
     Emitter *emitter = EMITTER_mesh_surface(
         type_node->name, (Mesh *)object->data, last_transformation, current_transformation, 1.0f);
-    step_description.m_emitters.append(emitter);
+    interface.step_description().m_emitters.append(emitter);
   }
 }
 
-static void INSERT_EMITTER_point(bNode *emitter_node,
-                                 IndexedNodeTree &indexed_tree,
-                                 FN::DataFlowNodes::GeneratedGraph &UNUSED(data_graph),
-                                 ModifierStepDescription &step_description,
-                                 WorldState &UNUSED(world_state))
+static void INSERT_EMITTER_point(ProcessNodeInterface &interface)
 {
-  BLI_assert(STREQ(emitter_node->idname, "bp_PointEmitterNode"));
-  bNodeSocket *emitter_output = (bNodeSocket *)emitter_node->outputs.first;
+  bNodeSocket *emitter_output = (bNodeSocket *)interface.bnode()->outputs.first;
 
-  for (SocketWithNode linked : indexed_tree.linked(emitter_output)) {
+  for (SocketWithNode linked : interface.indexed_tree().linked(emitter_output)) {
     if (!is_particle_type_node(linked.node)) {
       continue;
     }
 
     bNode *type_node = linked.node;
 
-    PointerRNA rna = indexed_tree.get_rna(emitter_node);
+    PointerRNA rna = interface.indexed_tree().get_rna(interface.bnode());
 
     float3 position;
     RNA_float_get_array(&rna, "position", position);
 
     Emitter *emitter = EMITTER_point(type_node->name, position);
-    step_description.m_emitters.append(emitter);
+    interface.step_description().m_emitters.append(emitter);
   }
 }
 
-static void INSERT_EVENT_age_reached(bNode *event_node,
-                                     IndexedNodeTree &indexed_tree,
-                                     FN::DataFlowNodes::GeneratedGraph &data_graph,
-                                     ModifierStepDescription &step_description,
-                                     WorldState &UNUSED(world_state))
+static void INSERT_EVENT_age_reached(ProcessNodeInterface &interface)
 {
-  BLI_assert(STREQ(event_node->idname, "bp_AgeReachedEventNode"));
-  bSocketList node_inputs(event_node->inputs);
-  FN::SharedFunction fn = create_function(
-      indexed_tree, data_graph, {node_inputs.get(1)}, event_node->name);
+  bSocketList node_inputs(interface.bnode()->inputs);
+  FN::SharedFunction fn = create_function(interface.indexed_tree(),
+                                          interface.data_graph(),
+                                          {node_inputs.get(1)},
+                                          interface.bnode()->name);
 
-  for (SocketWithNode linked : indexed_tree.linked(node_inputs.get(0))) {
+  for (SocketWithNode linked : interface.indexed_tree().linked(node_inputs.get(0))) {
     if (!is_particle_type_node(linked.node)) {
       continue;
     }
 
-    auto action = build_action({(bNodeSocket *)event_node->outputs.first, event_node},
-                               indexed_tree,
-                               data_graph,
-                               step_description);
-    auto event = EVENT_age_reached(event_node->name, fn, std::move(action));
+    auto action = build_action(
+        {(bNodeSocket *)interface.bnode()->outputs.first, interface.bnode()},
+        interface.indexed_tree(),
+        interface.data_graph(),
+        interface.step_description());
+    auto event = EVENT_age_reached(interface.bnode()->name, fn, std::move(action));
 
     bNode *type_node = linked.node;
-    step_description.m_types.lookup_ref(type_node->name)->m_events.append(event.release());
+    interface.step_description()
+        .m_types.lookup_ref(type_node->name)
+        ->m_events.append(event.release());
   }
 }
 
-static void INSERT_EVENT_mesh_collision(bNode *event_node,
-                                        IndexedNodeTree &indexed_tree,
-                                        FN::DataFlowNodes::GeneratedGraph &data_graph,
-                                        ModifierStepDescription &step_description,
-                                        WorldState &UNUSED(world_state))
+static void INSERT_EVENT_mesh_collision(ProcessNodeInterface &interface)
 {
-  BLI_assert(STREQ(event_node->idname, "bp_MeshCollisionEventNode"));
-  bSocketList node_inputs(event_node->inputs);
+  bSocketList node_inputs(interface.bnode()->inputs);
 
-  for (SocketWithNode linked : indexed_tree.linked(node_inputs.get(0))) {
+  for (SocketWithNode linked : interface.indexed_tree().linked(node_inputs.get(0))) {
     if (!is_particle_type_node(linked.node)) {
       continue;
     }
 
-    PointerRNA rna = indexed_tree.get_rna(event_node);
+    PointerRNA rna = interface.indexed_tree().get_rna(interface.bnode());
     Object *object = (Object *)RNA_pointer_get(&rna, "object").id.data;
     if (object == nullptr || object->type != OB_MESH) {
       continue;
     }
 
-    auto action = build_action({(bNodeSocket *)event_node->outputs.first, event_node},
-                               indexed_tree,
-                               data_graph,
-                               step_description);
-    auto event = EVENT_mesh_collision(event_node->name, object, std::move(action));
+    auto action = build_action(
+        {(bNodeSocket *)interface.bnode()->outputs.first, interface.bnode()},
+        interface.indexed_tree(),
+        interface.data_graph(),
+        interface.step_description());
+    auto event = EVENT_mesh_collision(interface.bnode()->name, object, std::move(action));
 
     bNode *type_node = linked.node;
-    step_description.m_types.lookup_ref(type_node->name)->m_events.append(event.release());
+    interface.step_description()
+        .m_types.lookup_ref(type_node->name)
+        ->m_events.append(event.release());
   }
 }
 
-static void INSERT_FORCE_gravity(bNode *force_node,
-                                 IndexedNodeTree &indexed_tree,
-                                 FN::DataFlowNodes::GeneratedGraph &data_graph,
-                                 ModifierStepDescription &step_description,
-                                 WorldState &UNUSED(world_state))
+static void INSERT_FORCE_gravity(ProcessNodeInterface &interface)
 {
-  BLI_assert(STREQ(force_node->idname, "bp_GravityForceNode"));
-  bSocketList node_inputs(force_node->inputs);
-  bSocketList node_outputs(force_node->outputs);
+  bSocketList node_inputs(interface.bnode()->inputs);
+  bSocketList node_outputs(interface.bnode()->outputs);
 
-  for (SocketWithNode linked : indexed_tree.linked(node_outputs.get(0))) {
+  for (SocketWithNode linked : interface.indexed_tree().linked(node_outputs.get(0))) {
     if (!is_particle_type_node(linked.node)) {
       continue;
     }
 
-    SharedFunction fn = create_function(
-        indexed_tree, data_graph, {node_inputs.get(0)}, force_node->name);
+    SharedFunction fn = create_function(interface.indexed_tree(),
+                                        interface.data_graph(),
+                                        {node_inputs.get(0)},
+                                        interface.bnode()->name);
 
     Force *force = FORCE_gravity(fn);
 
     bNode *type_node = linked.node;
     EulerIntegrator *integrator = reinterpret_cast<EulerIntegrator *>(
-        step_description.m_types.lookup_ref(type_node->name)->m_integrator);
+        interface.step_description().m_types.lookup_ref(type_node->name)->m_integrator);
     integrator->add_force(std::unique_ptr<Force>(force));
   }
 }
 
-static void INSERT_FORCE_turbulence(bNode *force_node,
-                                    IndexedNodeTree &indexed_tree,
-                                    FN::DataFlowNodes::GeneratedGraph &data_graph,
-                                    ModifierStepDescription &step_description,
-                                    WorldState &UNUSED(world_st

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list