[Bf-blender-cvs] [45b4704df6e] functions: use function to compute point input of point emitter

Jacques Lucke noreply at git.blender.org
Fri Jul 12 14:50:44 CEST 2019


Commit: 45b4704df6ee2a63d7b34638eb6d22a480375fba
Author: Jacques Lucke
Date:   Fri Jul 12 14:05:33 2019 +0200
Branches: functions
https://developer.blender.org/rB45b4704df6ee2a63d7b34638eb6d22a480375fba

use function to compute point input of point emitter

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

M	release/scripts/startup/nodes/bparticle_nodes/point_emitter.py
M	source/blender/simulations/bparticles/emitters.cpp
M	source/blender/simulations/bparticles/emitters.hpp
M	source/blender/simulations/bparticles/inserters.cpp

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

diff --git a/release/scripts/startup/nodes/bparticle_nodes/point_emitter.py b/release/scripts/startup/nodes/bparticle_nodes/point_emitter.py
index 48ab26faa8b..e4812378e51 100644
--- a/release/scripts/startup/nodes/bparticle_nodes/point_emitter.py
+++ b/release/scripts/startup/nodes/bparticle_nodes/point_emitter.py
@@ -7,14 +7,6 @@ class PointEmitterNode(bpy.types.Node, BParticlesNode):
     bl_idname = "bp_PointEmitterNode"
     bl_label = "Point Emitter"
 
-    position: FloatVectorProperty(
-        name="Value",
-        size=3,
-        default=(0.0, 0.0, 0.0),
-    )
-
     def declaration(self, builder : SocketBuilder):
+        builder.fixed_input("position", "Position", "Vector")
         builder.emitter_output("emitter", "Emitter")
-
-    def draw(self, layout):
-        layout.column().prop(self, "position", text="Position")
diff --git a/source/blender/simulations/bparticles/emitters.cpp b/source/blender/simulations/bparticles/emitters.cpp
index 31ae2af909a..913ad73269f 100644
--- a/source/blender/simulations/bparticles/emitters.cpp
+++ b/source/blender/simulations/bparticles/emitters.cpp
@@ -20,18 +20,28 @@ static float random_float()
 class PointEmitter : public Emitter {
  private:
   std::string m_particle_type_name;
-  float3 m_point;
+  SharedFunction m_compute_inputs_fn;
+  TupleCallBody *m_compute_inputs_body;
 
  public:
-  PointEmitter(StringRef particle_type_name, float3 point)
-      : m_particle_type_name(particle_type_name.to_std_string()), m_point(point)
+  PointEmitter(StringRef particle_type_name, SharedFunction &compute_inputs_fn)
+      : m_particle_type_name(particle_type_name.to_std_string()),
+        m_compute_inputs_fn(compute_inputs_fn)
   {
+    m_compute_inputs_body = m_compute_inputs_fn->body<TupleCallBody>();
   }
 
   void emit(EmitterInterface &interface) override
   {
+    FN_TUPLE_CALL_ALLOC_TUPLES(m_compute_inputs_body, fn_in, fn_out);
+
+    FN::ExecutionStack stack;
+    FN::ExecutionContext execution_context(stack);
+    m_compute_inputs_body->call(fn_in, fn_out, execution_context);
+    float3 point = fn_out.get<float3>(0);
+
     auto target = interface.particle_allocator().request(m_particle_type_name, 1);
-    target.set_float3("Position", {m_point});
+    target.set_float3("Position", {point});
     target.set_float3("Velocity", {float3{-1, -1, 0}});
     target.fill_float("Birth Time", interface.time_span().end());
   }
@@ -159,9 +169,10 @@ class SurfaceEmitter : public Emitter {
   }
 };
 
-std::unique_ptr<Emitter> EMITTER_point(StringRef particle_type_name, float3 point)
+std::unique_ptr<Emitter> EMITTER_point(StringRef particle_type_name,
+                                       SharedFunction &compute_inputs)
 {
-  Emitter *emitter = new PointEmitter(particle_type_name, point);
+  Emitter *emitter = new PointEmitter(particle_type_name, compute_inputs);
   return std::unique_ptr<Emitter>(emitter);
 }
 
diff --git a/source/blender/simulations/bparticles/emitters.hpp b/source/blender/simulations/bparticles/emitters.hpp
index d3380d0343f..64e86f32783 100644
--- a/source/blender/simulations/bparticles/emitters.hpp
+++ b/source/blender/simulations/bparticles/emitters.hpp
@@ -11,7 +11,8 @@ namespace BParticles {
 using FN::SharedFunction;
 using FN::TupleCallBody;
 
-std::unique_ptr<Emitter> EMITTER_point(StringRef particle_type_name, float3 point);
+std::unique_ptr<Emitter> EMITTER_point(StringRef particle_type_name,
+                                       SharedFunction &compute_inputs);
 
 std::unique_ptr<Emitter> EMITTER_mesh_surface(StringRef particle_type_name,
                                               SharedFunction &compute_inputs_fn,
diff --git a/source/blender/simulations/bparticles/inserters.cpp b/source/blender/simulations/bparticles/inserters.cpp
index b542f87f34f..f3cb49cca9a 100644
--- a/source/blender/simulations/bparticles/inserters.cpp
+++ b/source/blender/simulations/bparticles/inserters.cpp
@@ -227,11 +227,8 @@ static std::unique_ptr<Emitter> BUILD_EMITTER_point(BuildContext &ctx,
                                                     bNode *bnode,
                                                     StringRef particle_type_name)
 {
-  float3 position;
-  PointerRNA rna = ctx.indexed_tree.get_rna(bnode);
-  RNA_float_get_array(&rna, "position", position);
-
-  return EMITTER_point(particle_type_name, position);
+  SharedFunction fn = create_function_for_data_inputs(bnode, ctx.indexed_tree, ctx.data_graph);
+  return EMITTER_point(particle_type_name, fn);
 }
 
 static std::unique_ptr<Emitter> BUILD_EMITTER_mesh_surface(BuildContext &ctx,



More information about the Bf-blender-cvs mailing list