[Bf-blender-cvs] [d95073c9c76] functions: roll back some changes regarding world transition handling

Jacques Lucke noreply at git.blender.org
Tue Aug 27 13:54:11 CEST 2019


Commit: d95073c9c7681af2f89cd62415b28326b4bec099
Author: Jacques Lucke
Date:   Tue Aug 27 13:48:51 2019 +0200
Branches: functions
https://developer.blender.org/rBd95073c9c7681af2f89cd62415b28326b4bec099

roll back some changes regarding world transition handling

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

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

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

diff --git a/source/blender/simulations/bparticles/node_frontend.cpp b/source/blender/simulations/bparticles/node_frontend.cpp
index 46b0ebbfa74..f11d81e600b 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -24,12 +24,9 @@ using FN::FunctionGraph;
 using FN::SharedDataGraph;
 using FN::DataFlowNodes::VTreeDataGraph;
 
-using EmitterBuilder = std::function<Emitter *(WorldTransition &world_transition)>;
-
 class BehaviorCollector {
  public:
   Vector<Emitter *> &m_emitters;
-  Vector<EmitterBuilder> &m_emitter_builders;
   MultiMap<std::string, Force *> &m_forces;
   MultiMap<std::string, Event *> &m_events;
   MultiMap<std::string, OffsetHandler *> &m_offset_handlers;
@@ -205,8 +202,10 @@ static std::unique_ptr<Action> build_action_list(VTreeDataGraph &vtree_data_grap
   return std::unique_ptr<Action>(sequence);
 }
 
-using ParseNodeCallback = std::function<void(
-    BehaviorCollector &collector, VTreeDataGraph &vtree_data_graph, VirtualNode *vnode)>;
+using ParseNodeCallback = std::function<void(BehaviorCollector &collector,
+                                             VTreeDataGraph &vtree_data_graph,
+                                             WorldTransition &world_transition,
+                                             VirtualNode *vnode)>;
 
 static SharedFunction get_compute_data_inputs_function(VTreeDataGraph &vtree_data_graph,
                                                        VirtualNode *vnode)
@@ -230,31 +229,31 @@ static SharedFunction get_compute_data_inputs_function(VTreeDataGraph &vtree_dat
 
 static void PARSE_point_emitter(BehaviorCollector &collector,
                                 VTreeDataGraph &vtree_data_graph,
+                                WorldTransition &world_transition,
                                 VirtualNode *vnode)
 {
   SharedFunction inputs_fn = get_compute_data_inputs_function(vtree_data_graph, vnode);
   Vector<std::string> type_names = find_connected_particle_type_names(vnode->output(0, "Emitter"));
   std::string name = vnode->name();
 
-  collector.m_emitter_builders.append(
-      [inputs_fn, type_names, name](WorldTransition &world_transition) {
-        TupleCallBody &body = inputs_fn->body<TupleCallBody>();
-        FN_TUPLE_CALL_ALLOC_TUPLES(body, fn_in, fn_out);
-        body.call__setup_execution_context(fn_in, fn_out);
-
-        VaryingFloat3 position = world_transition.update_float3(
-            name, "Position", body.get_output<float3>(fn_out, 0, "Position"));
-        VaryingFloat3 velocity = world_transition.update_float3(
-            name, "Velocity", body.get_output<float3>(fn_out, 1, "Velocity"));
-        VaryingFloat size = world_transition.update_float(
-            name, "Size", body.get_output<float>(fn_out, 2, "Size"));
-
-        return new PointEmitter(std::move(type_names), position, velocity, size);
-      });
+  TupleCallBody &body = inputs_fn->body<TupleCallBody>();
+  FN_TUPLE_CALL_ALLOC_TUPLES(body, fn_in, fn_out);
+  body.call__setup_execution_context(fn_in, fn_out);
+
+  VaryingFloat3 position = world_transition.update_float3(
+      name, "Position", body.get_output<float3>(fn_out, 0, "Position"));
+  VaryingFloat3 velocity = world_transition.update_float3(
+      name, "Velocity", body.get_output<float3>(fn_out, 1, "Velocity"));
+  VaryingFloat size = world_transition.update_float(
+      name, "Size", body.get_output<float>(fn_out, 2, "Size"));
+
+  Emitter *emitter = new PointEmitter(std::move(type_names), position, velocity, size);
+  collector.m_emitters.append(emitter);
 }
 
 static void PARSE_mesh_emitter(BehaviorCollector &collector,
                                VTreeDataGraph &vtree_data_graph,
+                               WorldTransition &UNUSED(world_transition),
                                VirtualNode *vnode)
 {
   SharedFunction compute_inputs_fn = get_compute_data_inputs_function(vtree_data_graph, vnode);
@@ -286,6 +285,7 @@ static void PARSE_mesh_emitter(BehaviorCollector &collector,
 
 static void PARSE_gravity_force(BehaviorCollector &collector,
                                 VTreeDataGraph &vtree_data_graph,
+                                WorldTransition &UNUSED(world_transition),
                                 VirtualNode *vnode)
 {
   Vector<std::string> type_names = find_connected_particle_type_names(vnode->output(0, "Force"));
@@ -303,6 +303,7 @@ static void PARSE_gravity_force(BehaviorCollector &collector,
 
 static void PARSE_age_reached_event(BehaviorCollector &collector,
                                     VTreeDataGraph &vtree_data_graph,
+                                    WorldTransition &UNUSED(world_transition),
                                     VirtualNode *vnode)
 {
   Vector<std::string> type_names = find_connected_particle_type_names(vnode->output(0, "Event"));
@@ -322,6 +323,7 @@ static void PARSE_age_reached_event(BehaviorCollector &collector,
 
 static void PARSE_trails(BehaviorCollector &collector,
                          VTreeDataGraph &vtree_data_graph,
+                         WorldTransition &UNUSED(world_transition),
                          VirtualNode *vnode)
 {
   Vector<std::string> main_type_names = find_connected_particle_type_names(
@@ -345,6 +347,7 @@ static void PARSE_trails(BehaviorCollector &collector,
 
 static void PARSE_initial_grid_emitter(BehaviorCollector &collector,
                                        VTreeDataGraph &vtree_data_graph,
+                                       WorldTransition &UNUSED(world_transition),
                                        VirtualNode *vnode)
 {
   SharedFunction compute_inputs_fn = get_compute_data_inputs_function(vtree_data_graph, vnode);
@@ -365,6 +368,7 @@ static void PARSE_initial_grid_emitter(BehaviorCollector &collector,
 
 static void PARSE_turbulence_force(BehaviorCollector &collector,
                                    VTreeDataGraph &vtree_data_graph,
+                                   WorldTransition &UNUSED(world_transition),
                                    VirtualNode *vnode)
 {
   Vector<std::string> type_names = find_connected_particle_type_names(vnode->output(0, "Force"));
@@ -382,6 +386,7 @@ static void PARSE_turbulence_force(BehaviorCollector &collector,
 
 static void PARSE_mesh_collision(BehaviorCollector &collector,
                                  VTreeDataGraph &vtree_data_graph,
+                                 WorldTransition &UNUSED(world_transition),
                                  VirtualNode *vnode)
 {
   Vector<std::string> type_names = find_connected_particle_type_names(vnode->output(0, "Event"));
@@ -428,9 +433,9 @@ BLI_LAZY_INIT_STATIC(StringMap<ParseNodeCallback>, get_node_parsers)
 
 static void collect_particle_behaviors(
     VirtualNodeTree &vtree,
+    WorldTransition &world_transition,
     Vector<std::string> &r_type_names,
     Vector<Emitter *> &r_emitters,
-    Vector<EmitterBuilder> &r_emitter_builders,
     MultiMap<std::string, Event *> &r_events_per_type,
     MultiMap<std::string, OffsetHandler *> &r_offset_handler_per_type,
     StringMap<AttributesDeclaration> &r_attributes_per_type,
@@ -449,7 +454,6 @@ static void collect_particle_behaviors(
   MultiMap<std::string, Force *> forces;
   BehaviorCollector collector = {
       r_emitters,
-      r_emitter_builders,
       forces,
       r_events_per_type,
       r_offset_handler_per_type,
@@ -459,7 +463,7 @@ static void collect_particle_behaviors(
     StringRef idname = vnode->idname();
     ParseNodeCallback *callback = parsers.lookup_ptr(idname);
     if (callback != nullptr) {
-      (*callback)(collector, vtree_data_graph, vnode);
+      (*callback)(collector, vtree_data_graph, world_transition, vnode);
     }
   }
 
@@ -499,30 +503,24 @@ class NodeTreeStepSimulator : public StepSimulator {
   {
     WorldState &old_world_state = simulation_state.world();
     WorldState new_world_state;
+    WorldTransition world_transition = {old_world_state, new_world_state};
 
     Vector<std::string> type_names;
     Vector<Emitter *> emitters;
-    Vector<EmitterBuilder> emitter_builders;
     MultiMap<std::string, Event *> events;
     MultiMap<std::string, OffsetHandler *> offset_handlers;
     StringMap<AttributesDeclaration> attributes;
     StringMap<Integrator *> integrators;
 
     collect_particle_behaviors(m_vtree,
+                               world_transition,
                                type_names,
                                emitters,
-                               emitter_builders,
                                events,
                                offset_handlers,
                                attributes,
                                integrators);
 
-    WorldTransition world_transition = {old_world_state, new_world_state};
-    for (EmitterBuilder &builder : emitter_builders) {
-      Emitter *emitter = builder(world_transition);
-      emitters.append(emitter);
-    }
-
     StringMap<ParticleTypeInfo> types_to_simulate;
     for (std::string name : type_names) {
       ParticleTypeInfo type_info = {



More information about the Bf-blender-cvs mailing list