[Bf-blender-cvs] [3a0cfed4aae] functions: first time using the function nodes within bparticle nodes
Jacques Lucke
noreply at git.blender.org
Thu Jul 4 16:46:16 CEST 2019
Commit: 3a0cfed4aae6c37b30cfd6d2b1d3c92368d897e9
Author: Jacques Lucke
Date: Thu Jul 4 15:57:38 2019 +0200
Branches: functions
https://developer.blender.org/rB3a0cfed4aae6c37b30cfd6d2b1d3c92368d897e9
first time using the function nodes within bparticle nodes
===================================================================
M release/scripts/startup/nodes/bparticle_nodes/age_reached_event.py
M source/blender/functions/FN_data_flow_nodes.hpp
M source/blender/simulations/CMakeLists.txt
M source/blender/simulations/bparticles/c_wrapper.cpp
M tests/gtests/functions/CMakeLists.txt
===================================================================
diff --git a/release/scripts/startup/nodes/bparticle_nodes/age_reached_event.py b/release/scripts/startup/nodes/bparticle_nodes/age_reached_event.py
index e9311c4964f..39e74390110 100644
--- a/release/scripts/startup/nodes/bparticle_nodes/age_reached_event.py
+++ b/release/scripts/startup/nodes/bparticle_nodes/age_reached_event.py
@@ -7,10 +7,6 @@ class AgeReachedEventNode(bpy.types.Node, BParticlesNode):
bl_idname = "bp_AgeReachedEventNode"
bl_label = "Age Reached Event"
- age: FloatProperty(name="Age", default=3)
-
def declaration(self, builder : SocketBuilder):
builder.event_input("events", "Event")
-
- def draw(self, layout):
- layout.prop(self, "age", text="Age")
+ builder.fixed_input("age", "Age", "Float")
diff --git a/source/blender/functions/FN_data_flow_nodes.hpp b/source/blender/functions/FN_data_flow_nodes.hpp
index ca20e45d5bd..aafe6478b1f 100644
--- a/source/blender/functions/FN_data_flow_nodes.hpp
+++ b/source/blender/functions/FN_data_flow_nodes.hpp
@@ -2,3 +2,4 @@
#include "FN_data_flow_nodes-c.h"
#include "frontends/data_flow_nodes/function_generation.hpp"
+#include "frontends/data_flow_nodes/graph_generation.hpp"
diff --git a/source/blender/simulations/CMakeLists.txt b/source/blender/simulations/CMakeLists.txt
index eca93184e7b..bd8f5aa8ee2 100644
--- a/source/blender/simulations/CMakeLists.txt
+++ b/source/blender/simulations/CMakeLists.txt
@@ -5,6 +5,7 @@ set(INC
../makesrna
../blenkernel
../depsgraph
+ ../functions
../../../intern/guardedalloc
)
diff --git a/source/blender/simulations/bparticles/c_wrapper.cpp b/source/blender/simulations/bparticles/c_wrapper.cpp
index 59fb5412058..cd6856d2fef 100644
--- a/source/blender/simulations/bparticles/c_wrapper.cpp
+++ b/source/blender/simulations/bparticles/c_wrapper.cpp
@@ -26,6 +26,9 @@
#include "RNA_access.h"
+#include "FN_tuple_call.hpp"
+#include "FN_data_flow_nodes.hpp"
+
#define WRAPPERS(T1, T2) \
inline T1 unwrap(T2 value) \
{ \
@@ -270,6 +273,7 @@ typedef std::function<void(
EmitterInserter;
typedef std::function<void(bNode *bnode,
+ FN::DataFlowNodes::GeneratedGraph &generated_graph,
IndexedBParticlesTree &bparticles_tree,
ModifierStepDescription &step_description)>
EventInserter;
@@ -324,13 +328,49 @@ static void INSERT_EMITTER_point(bNode *emitter_node,
}
}
+class OldKillEvent : public Event {
+ private:
+ FN::SharedFunction m_compute_age_fn;
+
+ public:
+ OldKillEvent(FN::SharedFunction compute_age_fn) : m_compute_age_fn(compute_age_fn)
+ {
+ }
+
+ void filter(EventFilterInterface &interface) override
+ {
+ auto *body = m_compute_age_fn->body<FN::TupleCallBody>();
+ FN_TUPLE_CALL_ALLOC_TUPLES(body, fn_in, fn_out);
+
+ FN::ExecutionStack stack;
+ FN::ExecutionContext execution_context(stack);
+ body->call(fn_in, fn_out, execution_context);
+
+ float age = fn_out.get<float>(0);
+ EventFilter *filter = EVENT_age_reached(age);
+ filter->filter(interface);
+ delete filter;
+ }
+
+ void execute(EventExecuteInterface &interface) override
+ {
+ interface.kill(interface.particles().indices());
+ }
+};
+
static void INSERT_EVENT_age_reached(bNode *event_node,
+ FN::DataFlowNodes::GeneratedGraph &generated_graph,
IndexedBParticlesTree &bparticles_tree,
ModifierStepDescription &step_description)
{
BLI_assert(STREQ(event_node->idname, "bp_AgeReachedEventNode"));
bNodeSocket *event_input = (bNodeSocket *)event_node->inputs.first;
+ FN::DFGraphSocket age_input_socket = generated_graph.lookup_socket(event_input->next);
+ FN::FunctionGraph function_graph(generated_graph.graph(), {}, {age_input_socket});
+ FN::SharedFunction compute_age_function = function_graph.new_function("Compute Age");
+ FN::fgraph_add_TupleCallBody(compute_age_function, function_graph);
+
for (SocketWithNode linked : bparticles_tree.base().linked(event_input)) {
if (!bparticles_tree.is_particle_type_node(linked.node)) {
continue;
@@ -338,12 +378,7 @@ static void INSERT_EVENT_age_reached(bNode *event_node,
bNode *type_node = linked.node;
- PointerRNA rna = bparticles_tree.base().get_rna(event_node);
- float age = RNA_float_get(&rna, "age");
-
- EventFilter *event_filter = EVENT_age_reached(age);
- Action *action = ACTION_kill();
- Event *event = new EventActionTest(event_filter, action);
+ Event *event = new OldKillEvent(compute_age_function);
step_description.m_types.lookup_ref(type_node->name)->m_events.append(event);
}
}
@@ -364,6 +399,8 @@ static ModifierStepDescription *step_description_from_node_tree(bNodeTree *btree
IndexedNodeTree indexed_tree(btree);
IndexedBParticlesTree bparticles_tree(indexed_tree);
+ auto generated_graph = FN::DataFlowNodes::generate_graph(indexed_tree).value();
+
auto type_nodes = bparticles_tree.type_nodes();
for (uint i = 0; i < type_nodes.size(); i++) {
bNode *particle_type_node = type_nodes[i];
@@ -384,7 +421,7 @@ static ModifierStepDescription *step_description_from_node_tree(bNodeTree *btree
for (auto item : event_inserters.items()) {
for (bNode *event_node : indexed_tree.nodes_with_idname(item.key)) {
- item.value(event_node, bparticles_tree, *step_description);
+ item.value(event_node, generated_graph, bparticles_tree, *step_description);
}
}
diff --git a/tests/gtests/functions/CMakeLists.txt b/tests/gtests/functions/CMakeLists.txt
index 9467433f147..81df84370fe 100644
--- a/tests/gtests/functions/CMakeLists.txt
+++ b/tests/gtests/functions/CMakeLists.txt
@@ -22,6 +22,8 @@ set(INC
.
..
../../../source/blender/blenlib
+ ../../../source/blender/blenkernel
+ ../../../source/blender/makesrna
../../../source/blender/functions
../../../source/blender/makesdna
../../../intern/guardedalloc
More information about the Bf-blender-cvs
mailing list