[Bf-blender-cvs] [2cf9e5070a4] functions: start updating how the world state is used
Jacques Lucke
noreply at git.blender.org
Mon Aug 26 15:37:40 CEST 2019
Commit: 2cf9e5070a402525290ef70e8d4457d326ea62da
Author: Jacques Lucke
Date: Mon Aug 26 14:54:20 2019 +0200
Branches: functions
https://developer.blender.org/rB2cf9e5070a402525290ef70e8d4457d326ea62da
start updating how the world state is used
===================================================================
M source/blender/functions/backends/tuple_call/tuple_call.hpp
M source/blender/simulations/bparticles/emitters.cpp
M source/blender/simulations/bparticles/emitters.hpp
M source/blender/simulations/bparticles/node_frontend.cpp
M source/blender/simulations/bparticles/simulate.cpp
M source/blender/simulations/bparticles/simulate.hpp
M source/blender/simulations/bparticles/step_description.hpp
M source/blender/simulations/bparticles/step_description_interfaces.cpp
M source/blender/simulations/bparticles/step_description_interfaces.hpp
M source/blender/simulations/bparticles/world_state.hpp
===================================================================
diff --git a/source/blender/functions/backends/tuple_call/tuple_call.hpp b/source/blender/functions/backends/tuple_call/tuple_call.hpp
index e47677a6378..eeef4751714 100644
--- a/source/blender/functions/backends/tuple_call/tuple_call.hpp
+++ b/source/blender/functions/backends/tuple_call/tuple_call.hpp
@@ -262,4 +262,4 @@ class LazyInTupleCallBody : public TupleCallBodyBase {
*/
#define FN_TUPLE_CALL_ALLOC_TUPLES(body, name_in, name_out) \
FN_TUPLE_STACK_ALLOC(name_in, (body).meta_in().ref()); \
- FN_TUPLE_STACK_ALLOC(name_out, (body).meta_out().ref());
+ FN_TUPLE_STACK_ALLOC(name_out, (body).meta_out().ref())
diff --git a/source/blender/simulations/bparticles/emitters.cpp b/source/blender/simulations/bparticles/emitters.cpp
index 297aeffaa5c..caf435eea15 100644
--- a/source/blender/simulations/bparticles/emitters.cpp
+++ b/source/blender/simulations/bparticles/emitters.cpp
@@ -24,14 +24,15 @@ static float random_float()
void PointEmitter::emit(EmitterInterface &interface)
{
- Vector<float3> new_positions(m_amount);
- Vector<float3> new_velocities(m_amount);
- Vector<float> new_sizes(m_amount);
- Vector<float> birth_times(m_amount);
-
- for (uint i = 0; i < m_amount; i++) {
- float t = i / (float)m_amount;
- new_positions[i] = m_point.interpolate(t);
+ uint amount = 10;
+ Vector<float3> new_positions(amount);
+ Vector<float3> new_velocities(amount);
+ Vector<float> new_sizes(amount);
+ Vector<float> birth_times(amount);
+
+ for (uint i = 0; i < amount; i++) {
+ float t = i / (float)amount;
+ new_positions[i] = m_position.interpolate(t);
new_velocities[i] = m_velocity.interpolate(t);
new_sizes[i] = m_size.interpolate(t);
birth_times[i] = interface.time_span().interpolate(t);
diff --git a/source/blender/simulations/bparticles/emitters.hpp b/source/blender/simulations/bparticles/emitters.hpp
index d7c60920c68..4eed3bb5236 100644
--- a/source/blender/simulations/bparticles/emitters.hpp
+++ b/source/blender/simulations/bparticles/emitters.hpp
@@ -17,7 +17,7 @@ class SurfaceEmitter : public Emitter {
std::unique_ptr<Action> m_on_birth_action;
Object *m_object;
- InterpolatedFloat4x4 m_transform;
+ VaryingFloat4x4 m_transform;
float m_rate;
float m_normal_velocity;
float m_emitter_velocity;
@@ -27,7 +27,7 @@ class SurfaceEmitter : public Emitter {
SurfaceEmitter(Vector<std::string> types_to_emit,
std::unique_ptr<Action> on_birth_action,
Object *object,
- InterpolatedFloat4x4 transform,
+ VaryingFloat4x4 transform,
float rate,
float normal_velocity,
float emitter_velocity,
@@ -49,20 +49,17 @@ class SurfaceEmitter : public Emitter {
class PointEmitter : public Emitter {
private:
Vector<std::string> m_types_to_emit;
- uint m_amount;
- InterpolatedFloat3 m_point;
- InterpolatedFloat3 m_velocity;
- InterpolatedFloat m_size;
+ VaryingFloat3 m_position;
+ VaryingFloat3 m_velocity;
+ VaryingFloat m_size;
public:
PointEmitter(Vector<std::string> types_to_emit,
- uint amount,
- InterpolatedFloat3 point,
- InterpolatedFloat3 velocity,
- InterpolatedFloat size)
+ VaryingFloat3 position,
+ VaryingFloat3 velocity,
+ VaryingFloat size)
: m_types_to_emit(std::move(types_to_emit)),
- m_amount(amount),
- m_point(point),
+ m_position(position),
m_velocity(velocity),
m_size(size)
{
diff --git a/source/blender/simulations/bparticles/node_frontend.cpp b/source/blender/simulations/bparticles/node_frontend.cpp
index 8a05fef7624..5487c9c0ff8 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -24,9 +24,12 @@ using FN::FunctionGraph;
using FN::SharedDataGraph;
using FN::DataFlowNodes::VTreeDataGraph;
+using EmitterBuilder = std::function<Emitter *(WorldTransition &world_transition)>;
+
class BehaviorCollector {
public:
Vector<Emitter *> &m_emitters;
+ Vector<EmitterBuilder> &m_emitter_builders;
MultiMap<std::string, Force *> &m_forces;
MultiMap<std::string, Event *> &m_events;
MultiMap<std::string, OffsetHandler *> &m_offset_handlers;
@@ -202,10 +205,8 @@ static std::unique_ptr<Action> build_action_list(VTreeDataGraph &vtree_data_grap
return std::unique_ptr<Action>(sequence);
}
-using ParseNodeCallback = std::function<void(BehaviorCollector &collector,
- VTreeDataGraph &vtree_data_graph,
- WorldState &state,
- VirtualNode *vnode)>;
+using ParseNodeCallback = std::function<void(
+ BehaviorCollector &collector, VTreeDataGraph &vtree_data_graph, VirtualNode *vnode)>;
static SharedFunction get_compute_data_inputs_function(VTreeDataGraph &vtree_data_graph,
VirtualNode *vnode)
@@ -229,34 +230,31 @@ static SharedFunction get_compute_data_inputs_function(VTreeDataGraph &vtree_dat
static void PARSE_point_emitter(BehaviorCollector &collector,
VTreeDataGraph &vtree_data_graph,
- WorldState &world_state,
VirtualNode *vnode)
{
- SharedFunction compute_inputs_fn = get_compute_data_inputs_function(vtree_data_graph, vnode);
- TupleCallBody &body = compute_inputs_fn->body<TupleCallBody>();
-
- FN_TUPLE_CALL_ALLOC_TUPLES(body, fn_in, fn_out);
- body.call__setup_execution_context(fn_in, fn_out);
-
- float3 current_position = body.get_output<float3>(fn_out, 0, "Position");
- float3 current_velocity = body.get_output<float3>(fn_out, 1, "Velocity");
- float current_size = body.get_output<float>(fn_out, 2, "Size");
-
- StringRef node_name = vnode->name();
- InterpolatedFloat3 position = world_state.get_interpolated_value(node_name + "Position",
- current_position);
- InterpolatedFloat3 velocity = world_state.get_interpolated_value(node_name + "Velocity",
- current_velocity);
- InterpolatedFloat size = world_state.get_interpolated_value(node_name + "Size", current_size);
-
+ SharedFunction inputs_fn = get_compute_data_inputs_function(vtree_data_graph, vnode);
Vector<std::string> type_names = find_connected_particle_type_names(vnode->output(0, "Emitter"));
- PointEmitter *emitter = new PointEmitter(std::move(type_names), 10, position, velocity, size);
- collector.m_emitters.append(emitter);
+ std::string name = vnode->name();
+
+ collector.m_emitter_builders.append(
+ [inputs_fn, type_names, name](WorldTransition &world_transition) {
+ TupleCallBody &body = inputs_fn->body<TupleCallBody>();
+ FN_TUPLE_CALL_ALLOC_TUPLES(body, fn_in, fn_out);
+ body.call__setup_execution_context(fn_in, fn_out);
+
+ VaryingFloat3 position = world_transition.update_float3(
+ name, "Position", body.get_output<float3>(fn_out, 0, "Position"));
+ VaryingFloat3 velocity = world_transition.update_float3(
+ name, "Velocity", body.get_output<float3>(fn_out, 1, "Velocity"));
+ VaryingFloat size = world_transition.update_float(
+ name, "Size", body.get_output<float>(fn_out, 2, "Size"));
+
+ return new PointEmitter(std::move(type_names), position, velocity, size);
+ });
}
static void PARSE_mesh_emitter(BehaviorCollector &collector,
VTreeDataGraph &vtree_data_graph,
- WorldState &world_state,
VirtualNode *vnode)
{
SharedFunction compute_inputs_fn = get_compute_data_inputs_function(vtree_data_graph, vnode);
@@ -273,8 +271,7 @@ static void PARSE_mesh_emitter(BehaviorCollector &collector,
return;
}
- InterpolatedFloat4x4 transform = world_state.get_interpolated_value(vnode->name(),
- object->obmat);
+ VaryingFloat4x4 transform = {object->obmat, 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),
@@ -289,7 +286,6 @@ static void PARSE_mesh_emitter(BehaviorCollector &collector,
static void PARSE_gravity_force(BehaviorCollector &collector,
VTreeDataGraph &vtree_data_graph,
- WorldState &UNUSED(world_state),
VirtualNode *vnode)
{
Vector<std::string> type_names = find_connected_particle_type_names(vnode->output(0, "Force"));
@@ -307,7 +303,6 @@ static void PARSE_gravity_force(BehaviorCollector &collector,
static void PARSE_age_reached_event(BehaviorCollector &collector,
VTreeDataGraph &vtree_data_graph,
- WorldState &UNUSED(world_state),
VirtualNode *vnode)
{
Vector<std::string> type_names = find_connected_particle_type_names(vnode->output(0, "Event"));
@@ -327,7 +322,6 @@ static void PARSE_age_reached_event(BehaviorCollector &collector,
static void PARSE_trails(BehaviorCollector &collector,
VTreeDataGraph &vtree_data_graph,
- WorldState &UNUSED(world_state),
VirtualNode *vnode)
{
Vector<std::string> main_type_names = find_connected_particle_type_names(
@@ -351,7 +345,6 @@ static void PARSE_trails(BehaviorCollector &collector,
static void PARSE_initial_grid_emitter(BehaviorCollector &collector,
VTreeDataGraph &vtree_data_graph,
- WorldState &UNUSED(world_state),
VirtualNode *vnode)
{
SharedFunction compute_inputs_fn = get_compute_data_inputs_function(vtree_data
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list