[Bf-blender-cvs] [23e217eafcd] temp-geometry-nodes-fields-prototype: support position input in noise node
Jacques Lucke
noreply at git.blender.org
Wed Jul 28 14:14:23 CEST 2021
Commit: 23e217eafcdf42ef33e1b83d9790bd414ed1dc5e
Author: Jacques Lucke
Date: Wed Jul 28 11:49:30 2021 +0200
Branches: temp-geometry-nodes-fields-prototype
https://developer.blender.org/rB23e217eafcdf42ef33e1b83d9790bd414ed1dc5e
support position input in noise node
===================================================================
M source/blender/blenkernel/BKE_field.hh
M source/blender/modifiers/intern/MOD_nodes_evaluator.cc
M source/blender/nodes/geometry/nodes/node_geo_attribute.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_field.hh b/source/blender/blenkernel/BKE_field.hh
index 3b6f1a3d2f0..58800acba71 100644
--- a/source/blender/blenkernel/BKE_field.hh
+++ b/source/blender/blenkernel/BKE_field.hh
@@ -340,6 +340,14 @@ class MultiFunctionField : public Field {
}
};
+class AttributeField : public GVArrayInputField<AttributeFieldInputKey> {
+ public:
+ AttributeField(std::string name, const CPPType &type)
+ : GVArrayInputField<AttributeFieldInputKey>(std::move(name), type)
+ {
+ }
+};
+
class FieldRefBase {
protected:
FieldPtr field_;
diff --git a/source/blender/modifiers/intern/MOD_nodes_evaluator.cc b/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
index 1fb941e2b4a..9d9744b625c 100644
--- a/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
+++ b/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
@@ -364,9 +364,15 @@ static void get_socket_value(const SocketRef &socket, void *r_value)
return;
}
case SOCK_VECTOR: {
- float3 value;
- socket.typeinfo()->get_cpp_value(*socket.bsocket(), &value);
- new (r_value) bke::FieldRef<float3>(FieldPtr{new bke::ConstantField<float3>(value)});
+ if (socket.is_input() && (socket.bsocket()->flag & SOCK_HIDE_VALUE)) {
+ new (r_value) bke::FieldRef<float3>(
+ FieldPtr{new bke::AttributeField("position", CPPType::get<float3>())});
+ }
+ else {
+ float3 value;
+ socket.typeinfo()->get_cpp_value(*socket.bsocket(), &value);
+ new (r_value) bke::FieldRef<float3>(FieldPtr{new bke::ConstantField<float3>(value)});
+ }
return;
}
default:
diff --git a/source/blender/nodes/geometry/nodes/node_geo_attribute.cc b/source/blender/nodes/geometry/nodes/node_geo_attribute.cc
index 0e6bc782a1c..57d8ccb5942 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_attribute.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_attribute.cc
@@ -83,8 +83,7 @@ static void geo_node_attribute_exec(GeoNodeExecParams params)
const CPPType *cpp_type = get_cpp_type((eNodeSocketDatatype)node_storage->output_type);
BLI_assert(cpp_type != nullptr);
- bke::FieldPtr field = new bke::GVArrayInputField<bke::AttributeFieldInputKey>(std::move(name),
- *cpp_type);
+ bke::FieldPtr field = new bke::AttributeField(std::move(name), *cpp_type);
if (cpp_type->is<float>()) {
params.set_output("Attribute", bke::FieldRef<float>(std::move(field)));
}
More information about the Bf-blender-cvs
mailing list