[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