Commit: ab6106149fcd16e96614b600ab8def2f89089eea
Author: Jacques Lucke
Date:   Tue Jul 9 17:01:58 2019 +0200
Branches: functions
https://developer.blender.org/rBab6106149fcd16e96614b600ab8def2f89089eea

move world state to mesh emitter

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

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

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

diff --git a/source/blender/simulations/bparticles/emitters.cpp 
b/source/blender/simulations/bparticles/emitters.cpp
index 212bb403e59..5231166fa13 100644
--- a/source/blender/simulations/bparticles/emitters.cpp
+++ b/source/blender/simulations/bparticles/emitters.cpp
@@ -1,5 +1,3 @@
-#include "emitters.hpp"
-
 #include "DNA_mesh_types.h"
 #include "DNA_meshdata_types.h"
 #include "DNA_curve_types.h"
@@ -10,6 +8,8 @@
 
 #include "BLI_math_geom.h"
 
+#include "emitters.hpp"
+
 namespace BParticles {
 
 class PointEmitter : public Emitter {
@@ -37,11 +37,15 @@ class SurfaceEmitter : public Emitter {
   std::string m_particle_type_name;
   SharedFunction m_compute_inputs_fn;
   TupleCallBody *m_compute_inputs_body;
+  WorldState &m_world_state;
 
  public:
-  SurfaceEmitter(StringRef particle_type_name, SharedFunction &compute_inputs)
+  SurfaceEmitter(StringRef particle_type_name,
+                 SharedFunction &compute_inputs,
+                 WorldState &world_state)
       : m_particle_type_name(particle_type_name.to_std_string()),
-        m_compute_inputs_fn(compute_inputs)
+        m_compute_inputs_fn(compute_inputs),
+        m_world_state(world_state)
   {
     m_compute_inputs_body = m_compute_inputs_fn->body<TupleCallBody>();
   }
@@ -71,7 +75,7 @@ class SurfaceEmitter : public Emitter {
     }
 
     Mesh *mesh = (Mesh *)object->data;
-    float4x4 transform_start = object->obmat;
+    float4x4 transform_start = m_world_state.update(object->id.name, 
object->obmat);
     float4x4 transform_end = object->obmat;
     float normal_factor = 1.0f;
 
@@ -140,9 +144,11 @@ Emitter *EMITTER_point(StringRef particle_type_name, 
float3 point)
   return new PointEmitter(particle_type_name, point);
 }
 
-Emitter *EMITTER_mesh_surface(StringRef particle_type_name, SharedFunction 
&compute_inputs_fn)
+Emitter *EMITTER_mesh_surface(StringRef particle_type_name,
+                              SharedFunction &compute_inputs_fn,
+                              WorldState &world_state)
 {
-  return new SurfaceEmitter(particle_type_name, compute_inputs_fn);
+  return new SurfaceEmitter(particle_type_name, compute_inputs_fn, 
world_state);
 }
 
 }  // namespace BParticles
diff --git a/source/blender/simulations/bparticles/emitters.hpp 
b/source/blender/simulations/bparticles/emitters.hpp
index 4f8aa9a34ce..a99a05b4179 100644
--- a/source/blender/simulations/bparticles/emitters.hpp
+++ b/source/blender/simulations/bparticles/emitters.hpp
@@ -1,19 +1,19 @@
 #pragma once
 
-#include "core.hpp"
 #include "FN_tuple_call.hpp"
 
-struct Mesh;
-struct Path;
+#include "core.hpp"
+#include "world_state.hpp"
 
 namespace BParticles {
 
-using BLI::float4x4;
 using FN::SharedFunction;
 using FN::TupleCallBody;
 
 Emitter *EMITTER_point(StringRef particle_type_name, float3 point);
 
-Emitter *EMITTER_mesh_surface(StringRef particle_type_name, SharedFunction 
&compute_inputs_fn);
+Emitter *EMITTER_mesh_surface(StringRef particle_type_name,
+                              SharedFunction &compute_inputs_fn,
+                              WorldState &world_state);
 
 }  // namespace BParticles
diff --git a/source/blender/simulations/bparticles/inserters.cpp 
b/source/blender/simulations/bparticles/inserters.cpp
index c3080490ddd..2e9f7a46c0e 100644
--- a/source/blender/simulations/bparticles/inserters.cpp
+++ b/source/blender/simulations/bparticles/inserters.cpp
@@ -220,7 +220,7 @@ static void 
INSERT_EMITTER_mesh_surface(ProcessNodeInterface &interface)
                                         interface.bnode()->name);
 
     bNode *type_node = linked.node;
-    Emitter *emitter = EMITTER_mesh_surface(type_node->name, fn);
+    Emitter *emitter = EMITTER_mesh_surface(type_node->name, fn, 
interface.world_state());
     interface.step_description().m_emitters.append(emitter);
   }
 }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to