[Bf-blender-cvs] [35989c6715c] functions: convert image to socket

Jacques Lucke noreply at git.blender.org
Wed Dec 11 14:26:37 CET 2019


Commit: 35989c6715c780a7af369a0d046c77142264055d
Author: Jacques Lucke
Date:   Wed Dec 11 13:01:55 2019 +0100
Branches: functions
https://developer.blender.org/rB35989c6715c780a7af369a0d046c77142264055d

convert image to socket

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

M	release/scripts/startup/nodes/function_nodes/object_mesh.py
M	release/scripts/startup/nodes/sockets.py
M	release/scripts/startup/nodes/types.py
M	source/blender/blenlib/BLI_virtual_list_ref.h
M	source/blender/functions/FN_multi_function_dependencies.h
M	source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
M	source/blender/functions/intern/inlined_tree_multi_function_network/mappings_sockets.cc
M	source/blender/functions/intern/multi_functions/mixed.cc
M	source/blender/functions/intern/multi_functions/mixed.h
M	source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
M	source/blender/modifiers/intern/MOD_functionpoints_cxx.cc
M	source/blender/simulations/bparticles/node_frontend.cpp

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

diff --git a/release/scripts/startup/nodes/function_nodes/object_mesh.py b/release/scripts/startup/nodes/function_nodes/object_mesh.py
index 7be0c3e4244..3c5864ec5d2 100644
--- a/release/scripts/startup/nodes/function_nodes/object_mesh.py
+++ b/release/scripts/startup/nodes/function_nodes/object_mesh.py
@@ -78,16 +78,10 @@ class GetImageColorOnSurfaceNode(bpy.types.Node, FunctionNode):
     bl_idname = "fn_GetImageColorOnSurfaceNode"
     bl_label = "Get Image Color on Surface"
 
-    image: PointerProperty(
-        name="Image",
-        type=bpy.types.Image,
-    )
-
     use_list__surface_hook: NodeBuilder.VectorizedProperty()
+    use_list__image: NodeBuilder.VectorizedProperty()
 
     def declaration(self, builder: NodeBuilder):
         builder.vectorized_input("surface_hook", "use_list__surface_hook", "Surface Hook", "Surface Hooks", "Surface Hook")
-        builder.vectorized_output("color", ["use_list__surface_hook"], "Color", "Colors", "Color")
-
-    def draw(self, layout):
-        layout.prop(self, "image", text="")
+        builder.vectorized_input("image", "use_list__image", "Image", "Images", "Image")
+        builder.vectorized_output("color", ["use_list__surface_hook", "use_list__image"], "Color", "Colors", "Color")
diff --git a/release/scripts/startup/nodes/sockets.py b/release/scripts/startup/nodes/sockets.py
index 3e6e06f3553..e4c98a5ff5c 100644
--- a/release/scripts/startup/nodes/sockets.py
+++ b/release/scripts/startup/nodes/sockets.py
@@ -110,6 +110,26 @@ class ObjectSocket(bpy.types.NodeSocket, DataSocket):
     def restore_state(self, state):
         self.value = state
 
+class ImageSocket(bpy.types.NodeSocket, DataSocket):
+    bl_idname = "fn_ImageSocket"
+    bl_label = "Image Socket"
+    data_type = "Image"
+    color = (0.6, 0.6, 0.6, 1)
+
+    value: PointerProperty(
+        name="Value",
+        type=bpy.types.Image,
+    )
+
+    def draw_property(self, layout, node, text):
+        layout.prop(self, "value", text=text)
+
+    def get_state(self):
+        return self.value
+
+    def restore_state(self, state):
+        self.value = state
+
 class ColorSocket(bpy.types.NodeSocket, DataSocket):
     bl_idname = "fn_ColorSocket"
     bl_label = "Color Socket"
@@ -173,6 +193,8 @@ BooleanListSocket = create_simple_data_socket(
     "fn_BooleanListSocket", "Boolean List", (0.3, 0.3, 0.3, 0.5))
 ObjectListSocket = create_simple_data_socket(
     "fn_ObjectListSocket", "Object List", (0, 0, 0, 0.5))
+ImageListSocket = create_simple_data_socket(
+    "fn_ImageListSocket", "Image List", (0.6, 0.6, 0.6, 0.5))
 ColorListSocket = create_simple_data_socket(
     "fn_ColorListSocket", "Color List", (0.8, 0.8, 0.2, 0.5))
 TextListSocket = create_simple_data_socket(
diff --git a/release/scripts/startup/nodes/types.py b/release/scripts/startup/nodes/types.py
index bd4fb9448ba..82cc2562793 100644
--- a/release/scripts/startup/nodes/types.py
+++ b/release/scripts/startup/nodes/types.py
@@ -8,6 +8,7 @@ type_infos.insert_data_type(s.VectorSocket, s.VectorListSocket)
 type_infos.insert_data_type(s.IntegerSocket, s.IntegerListSocket)
 type_infos.insert_data_type(s.BooleanSocket, s.BooleanListSocket)
 type_infos.insert_data_type(s.ObjectSocket, s.ObjectListSocket)
+type_infos.insert_data_type(s.ImageSocket, s.ImageListSocket)
 type_infos.insert_data_type(s.ColorSocket, s.ColorListSocket)
 type_infos.insert_data_type(s.TextSocket, s.TextListSocket)
 type_infos.insert_data_type(s.SurfaceHookSocket, s.SurfaceHookListSocket)
diff --git a/source/blender/blenlib/BLI_virtual_list_ref.h b/source/blender/blenlib/BLI_virtual_list_ref.h
index b9727b4920d..ae3b75b7a32 100644
--- a/source/blender/blenlib/BLI_virtual_list_ref.h
+++ b/source/blender/blenlib/BLI_virtual_list_ref.h
@@ -107,7 +107,7 @@ template<typename T> class VirtualListRef {
     if (indices.size() == 0) {
       return true;
     }
-    if (m_category == Category::Single) {
+    if (this->is_single_element()) {
       return true;
     }
 
diff --git a/source/blender/functions/FN_multi_function_dependencies.h b/source/blender/functions/FN_multi_function_dependencies.h
index 2bf786f723d..af4a7b308b3 100644
--- a/source/blender/functions/FN_multi_function_dependencies.h
+++ b/source/blender/functions/FN_multi_function_dependencies.h
@@ -4,6 +4,7 @@
 #include "BLI_set.h"
 
 #include "DNA_object_types.h"
+#include "DNA_image_types.h"
 
 #include "BKE_inlined_node_tree.h"
 
@@ -36,14 +37,39 @@ inline Set<Object *> get_objects_used_by_inputs(const InlinedNodeTree &inlined_t
   return objects;
 }
 
-inline void add_objects_used_by_inputs(IDHandleLookup &id_handle_lookup,
-                                       const InlinedNodeTree &inlined_tree)
+inline Set<Image *> get_images_used_by_inputs(const InlinedNodeTree &inlined_tree)
+{
+  Set<Image *> images;
+  for (const XInputSocket *xsocket : inlined_tree.all_input_sockets()) {
+    if (xsocket->idname() == "fn_ImageSocket") {
+      Image *image = (Image *)RNA_pointer_get(xsocket->rna(), "value").data;
+      if (image != nullptr) {
+        images.add(image);
+      }
+    }
+  }
+  for (const XGroupInput *group_input : inlined_tree.all_group_inputs()) {
+    if (group_input->vsocket().idname() == "fn_ImageSocket") {
+      Image *image = (Image *)RNA_pointer_get(group_input->vsocket().rna(), "value").data;
+      if (image != nullptr) {
+        images.add(image);
+      }
+    }
+  }
+  return images;
+}
+
+inline void add_ids_used_by_inputs(IDHandleLookup &id_handle_lookup,
+                                   const InlinedNodeTree &inlined_tree)
 {
   for (Object *object : get_objects_used_by_inputs(inlined_tree)) {
     id_handle_lookup.add(object->id);
   }
+  for (Image *image : get_images_used_by_inputs(inlined_tree)) {
+    id_handle_lookup.add(image->id);
+  }
 }
 
 }  // namespace FN
 
-#endif /* __FN_MULTI_FUNCTION_DEPENDENCIES_H__ */
\ No newline at end of file
+#endif /* __FN_MULTI_FUNCTION_DEPENDENCIES_H__ */
diff --git a/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc b/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
index efa3627ca6b..52ba9d3b61e 100644
--- a/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
+++ b/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
@@ -83,9 +83,8 @@ static void INSERT_get_weight_on_surface(VNodeMFNetworkBuilder &builder)
 
 static void INSERT_get_image_color_on_surface(VNodeMFNetworkBuilder &builder)
 {
-  Image *image = (Image *)RNA_pointer_get(builder.rna(), "image").data;
   builder.set_vectorized_constructed_matching_fn<MF_GetImageColorOnSurface>(
-      {"use_list__surface_hook"}, image);
+      {"use_list__surface_hook", "use_list__image"});
 }
 
 static void INSERT_particle_is_in_group(VNodeMFNetworkBuilder &builder)
diff --git a/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_sockets.cc b/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_sockets.cc
index d5c75236918..22a70899d1c 100644
--- a/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_sockets.cc
+++ b/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_sockets.cc
@@ -55,6 +55,17 @@ static void INSERT_object_socket(VSocketMFNetworkBuilder &builder)
   }
 }
 
+static void INSERT_image_socket(VSocketMFNetworkBuilder &builder)
+{
+  Image *value = (Image *)RNA_pointer_get(builder.rna(), "value").data;
+  if (value == nullptr) {
+    builder.set_constant_value(BKE::ImageIDHandle());
+  }
+  else {
+    builder.set_constant_value(BKE::ImageIDHandle(value));
+  }
+}
+
 static void INSERT_text_socket(VSocketMFNetworkBuilder &builder)
 {
   char *value = RNA_string_get_alloc(builder.rna(), "value", nullptr, 0);
@@ -164,6 +175,7 @@ void add_inlined_tree_socket_mapping_info(VTreeMultiFunctionMappings &mappings)
   add_basic_type<BLI::float3>(mappings, "Vector", INSERT_vector_socket);
   add_basic_type<int32_t>(mappings, "Integer", INSERT_int_socket);
   add_basic_type<BKE::ObjectIDHandle>(mappings, "Object", INSERT_object_socket);
+  add_basic_type<BKE::ImageIDHandle>(mappings, "Image", INSERT_image_socket);
   add_basic_type<std::string>(mappings, "Text", INSERT_text_socket);
   add_basic_type<bool>(mappings, "Boolean", INSERT_bool_socket);
   add_basic_type<BLI::rgba_f>(mappings, "Color", INSERT_color_socket);
diff --git a/source/blender/functions/intern/multi_functions/mixed.cc b/source/blender/functions/intern/multi_functions/mixed.cc
index 6112e0f664e..30a4261d85b 100644
--- a/source/blender/functions/intern/multi_functions/mixed.cc
+++ b/source/blender/functions/intern/multi_functions/mixed.cc
@@ -26,6 +26,7 @@
 
 namespace FN {
 
+using BKE::ImageIDHandle;
 using BKE::ObjectIDHandle;
 using BKE::SurfaceHook;
 using BLI::float2;
@@ -34,6 +35,7 @@ using BLI::float4x4;
 using BLI::rgba_b;
 using BLI::rgba_f;
 using BLI::TemporaryArray;
+using BLI::TemporaryVector;
 
 MF_AddFloats::MF_AddFloats()
 {
@@ -469,39 +471,31 @@ void MF_GetWeightOnSurface::call(MFMask mask, MFParams params, MFContext context
   }
 }
 
-MF_GetImageColorOnSurface::MF_GetImageColorOnSurface(Image *image) : m_image(image)
+MF_GetImageColorOnSurface::MF_GetImageColorOnSurface()
 {
   MFSignatureBuilder signature("Get Image Color on Surface");
   signature.single_input<SurfaceHook>("Surface Hook");
+  signature.single_input<ImageIDHandle>("Image");
   signature.single_output<rgba_f>("Color");
   this->set_signature(signature);
 }
 
-static void get_colors_on_surface(MFMask mask,
-                                  MFParams params,
-                                  MFContext context,
+static void get_colors_on_surface(ArrayRef<uint> indices,
+                                  VirtualListRef<SurfaceHook> surface_hooks,
+                                  MutableArrayRef<rgba_f> r_colors,
+                                  rgba_f fallback,
+                                  const IDHandleLookup &id_handle_lookup,
                                   const ImBuf &ibuf)
 {
-  VirtualListRef<SurfaceHook> locations = params.readonly_single_input<SurfaceHook>(
-      0, "Surface Hook");
-  MutableArrayRef<rgba_f> r_

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list