[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