[Bf-blender-cvs] [98d9f2bdfa7] functions: store whether function depends on per element context
Jacques Lucke
noreply at git.blender.org
Fri Dec 6 13:02:10 CET 2019
Commit: 98d9f2bdfa7339077b8c0bb892639e7b4b2d44a4
Author: Jacques Lucke
Date: Fri Dec 6 11:35:34 2019 +0100
Branches: functions
https://developer.blender.org/rB98d9f2bdfa7339077b8c0bb892639e7b4b2d44a4
store whether function depends on per element context
===================================================================
M source/blender/functions/FN_multi_function.h
M source/blender/functions/intern/multi_functions/mixed.cc
===================================================================
diff --git a/source/blender/functions/FN_multi_function.h b/source/blender/functions/FN_multi_function.h
index 59fa0be5d04..392fa6724b4 100644
--- a/source/blender/functions/FN_multi_function.h
+++ b/source/blender/functions/FN_multi_function.h
@@ -22,6 +22,7 @@ class MFSignature {
Vector<std::string> m_param_names;
Vector<MFParamType> m_param_types;
Vector<uint> m_corrected_indices;
+ bool m_depends_on_per_element_context;
friend class MultiFunction;
friend class MFParams;
@@ -31,10 +32,12 @@ class MFSignature {
MFSignature(std::string function_name,
Vector<std::string> param_names,
- Vector<MFParamType> param_types)
+ Vector<MFParamType> param_types,
+ bool depends_on_per_element_context)
: m_function_name(std::move(function_name)),
m_param_names(std::move(param_names)),
- m_param_types(std::move(param_types))
+ m_param_types(std::move(param_types)),
+ m_depends_on_per_element_context(depends_on_per_element_context)
{
uint array_or_single_refs = 0;
uint mutable_array_refs = 0;
@@ -64,6 +67,11 @@ class MFSignature {
}
}
+ bool depends_on_per_element_context() const
+ {
+ return m_depends_on_per_element_context;
+ }
+
ArrayRef<MFParamType> param_types() const
{
return m_param_types;
@@ -80,12 +88,18 @@ class MFSignatureBuilder {
std::string m_function_name;
Vector<std::string> m_param_names;
Vector<MFParamType> m_param_types;
+ bool m_depends_on_per_element_context = false;
public:
MFSignatureBuilder(StringRef name) : m_function_name(name)
{
}
+ void depends_on_per_element_context(bool value)
+ {
+ m_depends_on_per_element_context = value;
+ }
+
/* Input Param Types */
template<typename T> void single_input(StringRef name)
@@ -152,8 +166,10 @@ class MFSignatureBuilder {
MFSignature build()
{
- return MFSignature(
- std::move(m_function_name), std::move(m_param_names), std::move(m_param_types));
+ return MFSignature(std::move(m_function_name),
+ std::move(m_param_names),
+ std::move(m_param_types),
+ m_depends_on_per_element_context);
}
};
diff --git a/source/blender/functions/intern/multi_functions/mixed.cc b/source/blender/functions/intern/multi_functions/mixed.cc
index 81b7edf42a8..2488e90b06d 100644
--- a/source/blender/functions/intern/multi_functions/mixed.cc
+++ b/source/blender/functions/intern/multi_functions/mixed.cc
@@ -736,6 +736,7 @@ void MF_SimpleVectorize::call(MFMask mask, MFParams params, MFContext context) c
MF_ContextVertexPosition::MF_ContextVertexPosition()
{
MFSignatureBuilder signature("Vertex Position");
+ signature.depends_on_per_element_context(true);
signature.single_output<float3>("Position");
this->set_signature(signature);
}
@@ -759,6 +760,7 @@ void MF_ContextVertexPosition::call(MFMask mask, MFParams params, MFContext cont
MF_ContextCurrentFrame::MF_ContextCurrentFrame()
{
MFSignatureBuilder signature("Current Frame");
+ signature.depends_on_per_element_context(true);
signature.single_output<float>("Frame");
this->set_signature(signature);
}
@@ -820,6 +822,7 @@ MF_ParticleAttributes::MF_ParticleAttributes(Vector<std::string> attribute_names
BLI_assert(m_attribute_names.size() == m_attribute_types.size());
MFSignatureBuilder signature("Particle Attributes");
+ signature.depends_on_per_element_context(true);
for (uint i = 0; i < m_attribute_names.size(); i++) {
signature.single_output(m_attribute_names[i], *m_attribute_types[i]);
}
@@ -859,6 +862,7 @@ void MF_ParticleAttributes::call(MFMask mask, MFParams params, MFContext context
MF_ParticleIsInGroup::MF_ParticleIsInGroup()
{
MFSignatureBuilder signature("Particle is in Group");
+ signature.depends_on_per_element_context(true);
signature.single_input<std::string>("Group Name");
signature.single_output<bool>("Is in Group");
this->set_signature(signature);
@@ -895,6 +899,8 @@ void MF_ParticleIsInGroup::call(MFMask mask, MFParams params, MFContext context)
MF_ClosestSurfaceHookOnObject::MF_ClosestSurfaceHookOnObject()
{
MFSignatureBuilder signature("Closest Point on Object");
+ /* Todo: remove this per element dependency. */
+ signature.depends_on_per_element_context(true);
signature.single_input<ObjectIDHandle>("Object");
signature.single_input<float3>("Position");
signature.single_output<SurfaceHook>("Closest Location");
More information about the Bf-blender-cvs
mailing list