[Bf-blender-cvs] [a581367a2b8] geometry-nodes: Geometry Nodes: give nodes access to object that is being modified

Jacques Lucke noreply at git.blender.org
Thu Nov 19 13:41:17 CET 2020


Commit: a581367a2b881371a86fd011634401da7d980371
Author: Jacques Lucke
Date:   Thu Nov 19 13:38:39 2020 +0100
Branches: geometry-nodes
https://developer.blender.org/rBa581367a2b881371a86fd011634401da7d980371

Geometry Nodes: give nodes access to object that is being modified

===================================================================

M	source/blender/modifiers/intern/MOD_nodes.cc
M	source/blender/nodes/NOD_geometry_exec.hh

===================================================================

diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index f7078c659a4..261b7d2809c 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -130,7 +130,9 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
     for (ID *id : used_ids) {
       if (GS(id->name) == ID_OB) {
         DEG_add_object_relation(ctx->node, (Object *)id, DEG_OB_COMP_TRANSFORM, "Nodes Modifier");
-        DEG_add_object_relation(ctx->node, (Object *)id, DEG_OB_COMP_GEOMETRY, "Nodes Modifier");
+        if (id != &ctx->object->id) {
+          DEG_add_object_relation(ctx->node, (Object *)id, DEG_OB_COMP_GEOMETRY, "Nodes Modifier");
+        }
       }
     }
   }
@@ -181,16 +183,19 @@ class GeometryNodesEvaluator {
   MultiFunctionByNode &mf_by_node_;
   const DataTypeConversions &conversions_;
   const PersistentDataHandleMap &handle_map_;
+  const Object *self_object_;
 
  public:
   GeometryNodesEvaluator(const Map<const DOutputSocket *, GMutablePointer> &group_input_data,
                          Vector<const DInputSocket *> group_outputs,
                          MultiFunctionByNode &mf_by_node,
-                         const PersistentDataHandleMap &handle_map)
+                         const PersistentDataHandleMap &handle_map,
+                         const Object *self_object)
       : group_outputs_(std::move(group_outputs)),
         mf_by_node_(mf_by_node),
         conversions_(get_implicit_type_conversions()),
-        handle_map_(handle_map)
+        handle_map_(handle_map),
+        self_object_(self_object)
   {
     for (auto item : group_input_data.items()) {
       this->forward_to_inputs(*item.key, item.value);
@@ -255,7 +260,7 @@ class GeometryNodesEvaluator {
 
     /* Execute the node. */
     GValueMap<StringRef> node_outputs_map{allocator_};
-    GeoNodeExecParams params{bnode, node_inputs_map, node_outputs_map, handle_map_};
+    GeoNodeExecParams params{bnode, node_inputs_map, node_outputs_map, handle_map_, self_object_};
     this->execute_node(node, params);
 
     /* Forward computed outputs to linked input sockets. */
@@ -727,7 +732,8 @@ static GeometrySet compute_geometry(const DerivedNodeTree &tree,
                                     Span<const DOutputSocket *> group_input_sockets,
                                     const DInputSocket &socket_to_compute,
                                     GeometrySet input_geometry_set,
-                                    NodesModifierData *nmd)
+                                    NodesModifierData *nmd,
+                                    const ModifierEvalContext *ctx)
 {
   ResourceCollector resources;
   LinearAllocator<> &allocator = resources.linear_allocator();
@@ -763,7 +769,8 @@ static GeometrySet compute_geometry(const DerivedNodeTree &tree,
   PersistentDataHandleMap handle_map;
   fill_data_handle_map(tree, handle_map);
 
-  GeometryNodesEvaluator evaluator{group_inputs, group_outputs, mf_by_node, handle_map};
+  GeometryNodesEvaluator evaluator{
+      group_inputs, group_outputs, mf_by_node, handle_map, ctx->object};
   Vector<GMutablePointer> results = evaluator.execute();
   BLI_assert(results.size() == 1);
   GMutablePointer result = results[0];
@@ -869,7 +876,7 @@ static void modifyGeometry(ModifierData *md,
   }
 
   geometry_set = compute_geometry(
-      tree, group_inputs, *group_outputs[0], std::move(geometry_set), nmd);
+      tree, group_inputs, *group_outputs[0], std::move(geometry_set), nmd, ctx);
 }
 
 static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
diff --git a/source/blender/nodes/NOD_geometry_exec.hh b/source/blender/nodes/NOD_geometry_exec.hh
index 7957873f4e6..912f45c6d58 100644
--- a/source/blender/nodes/NOD_geometry_exec.hh
+++ b/source/blender/nodes/NOD_geometry_exec.hh
@@ -46,16 +46,19 @@ class GeoNodeExecParams {
   GValueMap<StringRef> &input_values_;
   GValueMap<StringRef> &output_values_;
   const PersistentDataHandleMap &handle_map_;
+  const Object *self_object_;
 
  public:
   GeoNodeExecParams(const bNode &node,
                     GValueMap<StringRef> &input_values,
                     GValueMap<StringRef> &output_values,
-                    const PersistentDataHandleMap &handle_map)
+                    const PersistentDataHandleMap &handle_map,
+                    const Object *self_object)
       : node_(node),
         input_values_(input_values),
         output_values_(output_values),
-        handle_map_(handle_map)
+        handle_map_(handle_map),
+        self_object_(self_object)
   {
   }
 
@@ -124,6 +127,11 @@ class GeoNodeExecParams {
     return handle_map_;
   }
 
+  const Object *self_object() const
+  {
+    return self_object_;
+  }
+
  private:
   void check_extract_input(StringRef identifier, const CPPType *requested_type = nullptr);
   void check_set_output(StringRef identifier, const CPPType &value_type);



More information about the Bf-blender-cvs mailing list