[Bf-blender-cvs] [0ee75f415ab] functions: bring back transform interpolation for mesh emitter

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


Commit: 0ee75f415ab8dea406cdd95d514aaf53cee895c8
Author: Jacques Lucke
Date:   Tue Aug 27 13:54:03 2019 +0200
Branches: functions
https://developer.blender.org/rB0ee75f415ab8dea406cdd95d514aaf53cee895c8

bring back transform interpolation for mesh emitter

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

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

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

diff --git a/source/blender/simulations/bparticles/node_frontend.cpp b/source/blender/simulations/bparticles/node_frontend.cpp
index f11d81e600b..f7134ecd09c 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -253,7 +253,7 @@ static void PARSE_point_emitter(BehaviorCollector &collector,
 
 static void PARSE_mesh_emitter(BehaviorCollector &collector,
                                VTreeDataGraph &vtree_data_graph,
-                               WorldTransition &UNUSED(world_transition),
+                               WorldTransition &world_transition,
                                VirtualNode *vnode)
 {
   SharedFunction compute_inputs_fn = get_compute_data_inputs_function(vtree_data_graph, vnode);
@@ -270,7 +270,8 @@ static void PARSE_mesh_emitter(BehaviorCollector &collector,
     return;
   }
 
-  VaryingFloat4x4 transform = {object->obmat, object->obmat};
+  VaryingFloat4x4 transform = world_transition.update_float4x4(
+      vnode->name(), "Transform", 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),
diff --git a/source/blender/simulations/bparticles/world_state.hpp b/source/blender/simulations/bparticles/world_state.hpp
index 555dd5dfa76..580689c5714 100644
--- a/source/blender/simulations/bparticles/world_state.hpp
+++ b/source/blender/simulations/bparticles/world_state.hpp
@@ -47,6 +47,7 @@ class WorldState {
  private:
   StringMap<float> m_states_float;
   StringMap<float3> m_states_float3;
+  StringMap<float4x4> m_states_float4x4;
 
   friend WorldTransition;
 
@@ -60,6 +61,11 @@ class WorldState {
   {
     m_states_float3.add_new(main_id + sub_id, value);
   }
+
+  void store_state(StringRef main_id, StringRef sub_id, float4x4 value)
+  {
+    m_states_float4x4.add_new(main_id + sub_id, value);
+  }
 };
 
 class WorldTransition {
@@ -88,6 +94,14 @@ class WorldTransition {
     float3 old_value = m_old_state.m_states_float3.lookup_default(id, current);
     return {old_value, current};
   }
+
+  VaryingFloat4x4 update_float4x4(StringRef main_id, StringRef sub_id, float4x4 current)
+  {
+    std::string id = main_id + sub_id;
+    m_new_state.store_state(main_id, sub_id, current);
+    float4x4 old_value = m_old_state.m_states_float4x4.lookup_default(id, current);
+    return {old_value, current};
+  }
 };
 
 }  // namespace BParticles



More information about the Bf-blender-cvs mailing list