[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