[Bf-blender-cvs] [9e8f68f4fa8] functions: remove concept of particle function inputs from code
Jacques Lucke
noreply at git.blender.org
Sat Nov 30 16:40:31 CET 2019
Commit: 9e8f68f4fa8683884b2402530e81d24cd8cb1758
Author: Jacques Lucke
Date: Sat Nov 30 15:34:38 2019 +0100
Branches: functions
https://developer.blender.org/rB9e8f68f4fa8683884b2402530e81d24cd8cb1758
remove concept of particle function inputs from code
===================================================================
M source/blender/simulations/CMakeLists.txt
M source/blender/simulations/bparticles/node_frontend.cpp
M source/blender/simulations/bparticles/particle_function.cpp
M source/blender/simulations/bparticles/particle_function.hpp
D source/blender/simulations/bparticles/particle_function_builder.cpp
D source/blender/simulations/bparticles/particle_function_builder.hpp
===================================================================
diff --git a/source/blender/simulations/CMakeLists.txt b/source/blender/simulations/CMakeLists.txt
index b01ba776ebe..d536f124b82 100644
--- a/source/blender/simulations/CMakeLists.txt
+++ b/source/blender/simulations/CMakeLists.txt
@@ -55,8 +55,6 @@ set(SRC
bparticles/particle_function.cpp
bparticles/force_interface.hpp
bparticles/force_interface.cpp
- bparticles/particle_function_builder.hpp
- bparticles/particle_function_builder.cpp
)
set(LIB
diff --git a/source/blender/simulations/bparticles/node_frontend.cpp b/source/blender/simulations/bparticles/node_frontend.cpp
index bccd27d3957..13a370a70cd 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -17,7 +17,6 @@
#include "node_frontend.hpp"
#include "integrator.hpp"
-#include "particle_function_builder.hpp"
#include "emitters.hpp"
#include "events.hpp"
#include "offset_handlers.hpp"
@@ -122,15 +121,19 @@ class VTreeData {
ParticleFunction *particle_function_for_all_inputs(const XNode &xnode)
{
- Optional<std::unique_ptr<ParticleFunction>> fn = create_particle_function(
- xnode, m_inlined_tree_data_graph, m_data_cache, m_persistent_surface_lookup);
- if (!fn.has_value()) {
- return nullptr;
+ Vector<const MFInputSocket *> sockets_to_compute;
+ for (const XInputSocket *xsocket : xnode.inputs()) {
+ if (m_inlined_tree_data_graph.is_mapped(*xsocket)) {
+ sockets_to_compute.append(&m_inlined_tree_data_graph.lookup_dummy_socket(*xsocket));
+ }
}
- ParticleFunction *fn_ptr = fn->get();
- BLI_assert(fn_ptr != nullptr);
- m_resources.add(std::move(fn.extract()), __func__);
- return fn_ptr;
+
+ const MultiFunction &fn = this->construct<FN::MF_EvaluateNetwork>(
+ "Evaluate Network", Vector<const MFOutputSocket *>(), std::move(sockets_to_compute));
+ ParticleFunction &particle_fn = this->construct<ParticleFunction>(
+ "Particle Function", fn, m_data_cache, m_persistent_surface_lookup);
+
+ return &particle_fn;
}
Optional<NamedGenericTupleRef> compute_inputs(const XNode &xnode, ArrayRef<uint> input_indices)
diff --git a/source/blender/simulations/bparticles/particle_function.cpp b/source/blender/simulations/bparticles/particle_function.cpp
index a11f5b406d8..70859b858ab 100644
--- a/source/blender/simulations/bparticles/particle_function.cpp
+++ b/source/blender/simulations/bparticles/particle_function.cpp
@@ -8,26 +8,15 @@ namespace BParticles {
using FN::CPPType;
-ParticleFunctionInputProvider::~ParticleFunctionInputProvider()
-{
-}
-
-ParticleFunction::ParticleFunction(std::unique_ptr<const MultiFunction> fn,
- Vector<ParticleFunctionInputProvider *> input_providers,
+ParticleFunction::ParticleFunction(const MultiFunction &fn,
FN::ExternalDataCacheContext &data_cache,
FN::PersistentSurfacesLookupContext &persistent_surface_lookup)
- : m_fn(std::move(fn)),
- m_input_providers(std::move(input_providers)),
- m_data_cache(data_cache),
- m_persistent_surface_lookup(persistent_surface_lookup)
+ : m_fn(fn), m_data_cache(data_cache), m_persistent_surface_lookup(persistent_surface_lookup)
{
}
ParticleFunction::~ParticleFunction()
{
- for (auto *provider : m_input_providers) {
- delete provider;
- }
}
std::unique_ptr<ParticleFunctionResult> ParticleFunction::compute(ActionInterface &interface)
@@ -60,14 +49,15 @@ std::unique_ptr<ParticleFunctionResult> ParticleFunction::compute(ArrayRef<uint>
auto result = BLI::make_unique<ParticleFunctionResult>();
result->m_pindices = pindices;
- FN::MFParamsBuilder params_builder(*m_fn, array_size);
+ FN::MFParamsBuilder params_builder(m_fn, array_size);
FN::MFContextBuilder context_builder;
Vector<GenericMutableArrayRef> arrays_to_free;
- for (uint param_index : m_fn->param_indices()) {
- FN::MFParamType param_type = m_fn->param_type(param_index);
+ for (uint param_index : m_fn.param_indices()) {
+ FN::MFParamType param_type = m_fn.param_type(param_index);
switch (param_type.type()) {
+ case FN::MFParamType::SingleInput:
case FN::MFParamType::VectorInput:
case FN::MFParamType::MutableVector:
case FN::MFParamType::MutableSingle:
@@ -77,35 +67,6 @@ std::unique_ptr<ParticleFunctionResult> ParticleFunction::compute(ArrayRef<uint>
/*TODO */
BLI_assert(false);
break;
- case FN::MFParamType::SingleInput: {
- auto *provider = m_input_providers[param_index];
- InputProviderInterface interface(pindices, attributes, action_context);
- auto optional_array = provider->get(interface);
- const CPPType &type = param_type.data_type().single__cpp_type();
- if (optional_array.has_value()) {
- ParticleFunctionInputArray array = optional_array.extract();
- BLI_assert(array.buffer != nullptr);
- BLI_assert(array.stride > 0);
-
- GenericMutableArrayRef array_ref{type, array.buffer, array_size};
- params_builder.add_readonly_single_input(array_ref);
-
- if (array.is_newly_allocated) {
- arrays_to_free.append(array_ref);
- }
- }
- else {
- uint element_size = type.size();
- void *default_buffer = BLI_temporary_allocate(element_size * array_size);
- for (uint pindex : pindices) {
- memset(POINTER_OFFSET(default_buffer, pindex * element_size), 0, element_size);
- }
- GenericMutableArrayRef array_ref{type, default_buffer, array_size};
- params_builder.add_readonly_single_input(array_ref);
- arrays_to_free.append(array_ref);
- }
- break;
- }
case FN::MFParamType::SingleOutput: {
const CPPType &type = param_type.data_type().single__cpp_type();
void *output_buffer = BLI_temporary_allocate(type.size() * array_size);
@@ -122,7 +83,7 @@ std::unique_ptr<ParticleFunctionResult> ParticleFunction::compute(ArrayRef<uint>
context_builder.add_element_context(m_data_cache);
context_builder.add_element_context(m_persistent_surface_lookup);
- m_fn->call(pindices, params_builder, context_builder);
+ m_fn.call(pindices, params_builder, context_builder);
for (GenericMutableArrayRef array_ref : arrays_to_free) {
array_ref.destruct_indices(pindices);
diff --git a/source/blender/simulations/bparticles/particle_function.hpp b/source/blender/simulations/bparticles/particle_function.hpp
index a1bd1dfd2aa..491e76ca1b2 100644
--- a/source/blender/simulations/bparticles/particle_function.hpp
+++ b/source/blender/simulations/bparticles/particle_function.hpp
@@ -45,70 +45,14 @@ class ParticleFunctionResult : BLI::NonCopyable, BLI::NonMovable {
}
};
-struct ParticleFunctionInputArray {
- void *buffer = nullptr;
- uint stride = 0;
- bool is_newly_allocated = false;
-
- ParticleFunctionInputArray(void *buffer, uint stride, bool is_newly_allocated)
- : buffer(buffer), stride(stride), is_newly_allocated(is_newly_allocated)
- {
- }
-
- template<typename T>
- ParticleFunctionInputArray(ArrayRef<T> array, bool is_newly_allocated)
- : ParticleFunctionInputArray((void *)array.begin(), sizeof(T), is_newly_allocated)
- {
- }
-};
-
-class InputProviderInterface {
- private:
- ArrayRef<uint> m_pindices;
- AttributesRef m_attributes;
- ActionContext *m_action_context;
-
- public:
- InputProviderInterface(ArrayRef<uint> pindices,
- AttributesRef attributes,
- ActionContext *action_context)
- : m_pindices(pindices), m_attributes(attributes), m_action_context(action_context)
- {
- }
-
- ArrayRef<uint> pindices()
- {
- return m_pindices;
- }
-
- AttributesRef attributes()
- {
- return m_attributes;
- }
-
- ActionContext *action_context()
- {
- return m_action_context;
- }
-};
-
-class ParticleFunctionInputProvider {
- public:
- virtual ~ParticleFunctionInputProvider();
-
- virtual Optional<ParticleFunctionInputArray> get(InputProviderInterface &interface) = 0;
-};
-
class ParticleFunction {
private:
- std::unique_ptr<const MultiFunction> m_fn;
- Vector<ParticleFunctionInputProvider *> m_input_providers;
+ const MultiFunction &m_fn;
FN::ExternalDataCacheContext &m_data_cache;
FN::PersistentSurfacesLookupContext &m_persistent_surface_lookup;
public:
- ParticleFunction(std::unique_ptr<const MultiFunction> fn,
- Vector<ParticleFunctionInputProvider *> input_providers,
+ ParticleFunction(const MultiFunction &fn,
FN::ExternalDataCacheContext &data_cache,
FN::PersistentSurfacesLookupContext &persistent_surface_lookup);
diff --git a/source/blender/simulations/bparticles/particle_function_builder.cpp b/source/blender/simulations/bparticles/particle_function_builder.cpp
deleted file mode 100644
index aa4f9a0dec9..00000000000
--- a/source/blender/simulations/bparticles/particle_function_builder.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-#include "BLI_lazy_init_cxx.h"
-#include "BLI_hash.h"
-
-#include "particle_function_builder.hpp"
-
-#include "events.hpp"
-#include "action_contexts.hpp"
-
-#include "FN_multi_functions.h"
-
-namespace BParticles {
-
-using BKE::XInputSocket;
-using BKE::XOutputSocket;
-using BLI::float2;
-using BLI::rgba_b;
-using FN::MFInputSocket;
-using FN::MFOutputSocket;
-
-static Vector<const MFInputSocket *> find_input_data_sockets(const XNode &xnode,
- VTreeMFNetwork &data_graph)
-{
- Vector<const MFInputSocket *> inputs;
- for (const XInputSocket *xsocket : xnode.inputs()) {
- if (data_graph.is_mapped(*xsocket)) {
- const MFInputSocket &socket = data_graph.lookup_dummy_socket(*xsocket);
- inputs.append(&socket);
- }
- }
- return inputs;
-}
-
-static VectorSet<const XOutputSocket *> find_particle_dependencies(
- VTreeMFNetwork &data_graph, ArrayRef<const MFInputSocket *> sockets)
-{
- Vector<const MFOutputSocket *> dummy_dependencies = data_graph.network().find_dummy_dependencies(
- soc
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list