[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