[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