[Bf-blender-cvs] [2cf9e5070a4] functions: start updating how the world state is used

Jacques Lucke noreply at git.blender.org
Mon Aug 26 15:37:40 CEST 2019


Commit: 2cf9e5070a402525290ef70e8d4457d326ea62da
Author: Jacques Lucke
Date:   Mon Aug 26 14:54:20 2019 +0200
Branches: functions
https://developer.blender.org/rB2cf9e5070a402525290ef70e8d4457d326ea62da

start updating how the world state is used

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

M	source/blender/functions/backends/tuple_call/tuple_call.hpp
M	source/blender/simulations/bparticles/emitters.cpp
M	source/blender/simulations/bparticles/emitters.hpp
M	source/blender/simulations/bparticles/node_frontend.cpp
M	source/blender/simulations/bparticles/simulate.cpp
M	source/blender/simulations/bparticles/simulate.hpp
M	source/blender/simulations/bparticles/step_description.hpp
M	source/blender/simulations/bparticles/step_description_interfaces.cpp
M	source/blender/simulations/bparticles/step_description_interfaces.hpp
M	source/blender/simulations/bparticles/world_state.hpp

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

diff --git a/source/blender/functions/backends/tuple_call/tuple_call.hpp b/source/blender/functions/backends/tuple_call/tuple_call.hpp
index e47677a6378..eeef4751714 100644
--- a/source/blender/functions/backends/tuple_call/tuple_call.hpp
+++ b/source/blender/functions/backends/tuple_call/tuple_call.hpp
@@ -262,4 +262,4 @@ class LazyInTupleCallBody : public TupleCallBodyBase {
  */
 #define FN_TUPLE_CALL_ALLOC_TUPLES(body, name_in, name_out) \
   FN_TUPLE_STACK_ALLOC(name_in, (body).meta_in().ref()); \
-  FN_TUPLE_STACK_ALLOC(name_out, (body).meta_out().ref());
+  FN_TUPLE_STACK_ALLOC(name_out, (body).meta_out().ref())
diff --git a/source/blender/simulations/bparticles/emitters.cpp b/source/blender/simulations/bparticles/emitters.cpp
index 297aeffaa5c..caf435eea15 100644
--- a/source/blender/simulations/bparticles/emitters.cpp
+++ b/source/blender/simulations/bparticles/emitters.cpp
@@ -24,14 +24,15 @@ static float random_float()
 
 void PointEmitter::emit(EmitterInterface &interface)
 {
-  Vector<float3> new_positions(m_amount);
-  Vector<float3> new_velocities(m_amount);
-  Vector<float> new_sizes(m_amount);
-  Vector<float> birth_times(m_amount);
-
-  for (uint i = 0; i < m_amount; i++) {
-    float t = i / (float)m_amount;
-    new_positions[i] = m_point.interpolate(t);
+  uint amount = 10;
+  Vector<float3> new_positions(amount);
+  Vector<float3> new_velocities(amount);
+  Vector<float> new_sizes(amount);
+  Vector<float> birth_times(amount);
+
+  for (uint i = 0; i < amount; i++) {
+    float t = i / (float)amount;
+    new_positions[i] = m_position.interpolate(t);
     new_velocities[i] = m_velocity.interpolate(t);
     new_sizes[i] = m_size.interpolate(t);
     birth_times[i] = interface.time_span().interpolate(t);
diff --git a/source/blender/simulations/bparticles/emitters.hpp b/source/blender/simulations/bparticles/emitters.hpp
index d7c60920c68..4eed3bb5236 100644
--- a/source/blender/simulations/bparticles/emitters.hpp
+++ b/source/blender/simulations/bparticles/emitters.hpp
@@ -17,7 +17,7 @@ class SurfaceEmitter : public Emitter {
   std::unique_ptr<Action> m_on_birth_action;
 
   Object *m_object;
-  InterpolatedFloat4x4 m_transform;
+  VaryingFloat4x4 m_transform;
   float m_rate;
   float m_normal_velocity;
   float m_emitter_velocity;
@@ -27,7 +27,7 @@ class SurfaceEmitter : public Emitter {
   SurfaceEmitter(Vector<std::string> types_to_emit,
                  std::unique_ptr<Action> on_birth_action,
                  Object *object,
-                 InterpolatedFloat4x4 transform,
+                 VaryingFloat4x4 transform,
                  float rate,
                  float normal_velocity,
                  float emitter_velocity,
@@ -49,20 +49,17 @@ class SurfaceEmitter : public Emitter {
 class PointEmitter : public Emitter {
  private:
   Vector<std::string> m_types_to_emit;
-  uint m_amount;
-  InterpolatedFloat3 m_point;
-  InterpolatedFloat3 m_velocity;
-  InterpolatedFloat m_size;
+  VaryingFloat3 m_position;
+  VaryingFloat3 m_velocity;
+  VaryingFloat m_size;
 
  public:
   PointEmitter(Vector<std::string> types_to_emit,
-               uint amount,
-               InterpolatedFloat3 point,
-               InterpolatedFloat3 velocity,
-               InterpolatedFloat size)
+               VaryingFloat3 position,
+               VaryingFloat3 velocity,
+               VaryingFloat size)
       : m_types_to_emit(std::move(types_to_emit)),
-        m_amount(amount),
-        m_point(point),
+        m_position(position),
         m_velocity(velocity),
         m_size(size)
   {
diff --git a/source/blender/simulations/bparticles/node_frontend.cpp b/source/blender/simulations/bparticles/node_frontend.cpp
index 8a05fef7624..5487c9c0ff8 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -24,9 +24,12 @@ 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;
@@ -202,10 +205,8 @@ 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,
-                                             WorldState &state,
-                                             VirtualNode *vnode)>;
+using ParseNodeCallback = std::function<void(
+    BehaviorCollector &collector, VTreeDataGraph &vtree_data_graph, VirtualNode *vnode)>;
 
 static SharedFunction get_compute_data_inputs_function(VTreeDataGraph &vtree_data_graph,
                                                        VirtualNode *vnode)
@@ -229,34 +230,31 @@ static SharedFunction get_compute_data_inputs_function(VTreeDataGraph &vtree_dat
 
 static void PARSE_point_emitter(BehaviorCollector &collector,
                                 VTreeDataGraph &vtree_data_graph,
-                                WorldState &world_state,
                                 VirtualNode *vnode)
 {
-  SharedFunction compute_inputs_fn = get_compute_data_inputs_function(vtree_data_graph, vnode);
-  TupleCallBody &body = compute_inputs_fn->body<TupleCallBody>();
-
-  FN_TUPLE_CALL_ALLOC_TUPLES(body, fn_in, fn_out);
-  body.call__setup_execution_context(fn_in, fn_out);
-
-  float3 current_position = body.get_output<float3>(fn_out, 0, "Position");
-  float3 current_velocity = body.get_output<float3>(fn_out, 1, "Velocity");
-  float current_size = body.get_output<float>(fn_out, 2, "Size");
-
-  StringRef node_name = vnode->name();
-  InterpolatedFloat3 position = world_state.get_interpolated_value(node_name + "Position",
-                                                                   current_position);
-  InterpolatedFloat3 velocity = world_state.get_interpolated_value(node_name + "Velocity",
-                                                                   current_velocity);
-  InterpolatedFloat size = world_state.get_interpolated_value(node_name + "Size", current_size);
-
+  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"));
-  PointEmitter *emitter = new PointEmitter(std::move(type_names), 10, position, velocity, size);
-  collector.m_emitters.append(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);
+      });
 }
 
 static void PARSE_mesh_emitter(BehaviorCollector &collector,
                                VTreeDataGraph &vtree_data_graph,
-                               WorldState &world_state,
                                VirtualNode *vnode)
 {
   SharedFunction compute_inputs_fn = get_compute_data_inputs_function(vtree_data_graph, vnode);
@@ -273,8 +271,7 @@ static void PARSE_mesh_emitter(BehaviorCollector &collector,
     return;
   }
 
-  InterpolatedFloat4x4 transform = world_state.get_interpolated_value(vnode->name(),
-                                                                      object->obmat);
+  VaryingFloat4x4 transform = {object->obmat, object->obmat};
   Vector<std::string> type_names = find_connected_particle_type_names(vnode->output(0, "Emitter"));
   Emitter *emitter = new SurfaceEmitter(std::move(type_names),
                                         std::move(on_birth_action),
@@ -289,7 +286,6 @@ static void PARSE_mesh_emitter(BehaviorCollector &collector,
 
 static void PARSE_gravity_force(BehaviorCollector &collector,
                                 VTreeDataGraph &vtree_data_graph,
-                                WorldState &UNUSED(world_state),
                                 VirtualNode *vnode)
 {
   Vector<std::string> type_names = find_connected_particle_type_names(vnode->output(0, "Force"));
@@ -307,7 +303,6 @@ static void PARSE_gravity_force(BehaviorCollector &collector,
 
 static void PARSE_age_reached_event(BehaviorCollector &collector,
                                     VTreeDataGraph &vtree_data_graph,
-                                    WorldState &UNUSED(world_state),
                                     VirtualNode *vnode)
 {
   Vector<std::string> type_names = find_connected_particle_type_names(vnode->output(0, "Event"));
@@ -327,7 +322,6 @@ static void PARSE_age_reached_event(BehaviorCollector &collector,
 
 static void PARSE_trails(BehaviorCollector &collector,
                          VTreeDataGraph &vtree_data_graph,
-                         WorldState &UNUSED(world_state),
                          VirtualNode *vnode)
 {
   Vector<std::string> main_type_names = find_connected_particle_type_names(
@@ -351,7 +345,6 @@ static void PARSE_trails(BehaviorCollector &collector,
 
 static void PARSE_initial_grid_emitter(BehaviorCollector &collector,
                                        VTreeDataGraph &vtree_data_graph,
-                                       WorldState &UNUSED(world_state),
                                        VirtualNode *vnode)
 {
   SharedFunction compute_inputs_fn = get_compute_data_inputs_function(vtree_data

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list