[Bf-blender-cvs] [28a1b801b12] functions: new Boolean type

Jacques Lucke noreply at git.blender.org
Sun Mar 24 16:17:07 CET 2019


Commit: 28a1b801b128c97287c82752de4ac4d769003bb7
Author: Jacques Lucke
Date:   Sun Mar 24 16:14:25 2019 +0100
Branches: functions
https://developer.blender.org/rB28a1b801b128c97287c82752de4ac4d769003bb7

new Boolean type

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

M	release/scripts/startup/function_nodes/sockets.py
M	release/scripts/startup/function_nodes/types.py
M	source/blender/functions/CMakeLists.txt
M	source/blender/functions/FN_types.hpp
M	source/blender/functions/frontends/data_flow_nodes/builder.cpp
M	source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp
A	source/blender/functions/types/boolean.cpp
A	source/blender/functions/types/boolean.hpp

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

diff --git a/release/scripts/startup/function_nodes/sockets.py b/release/scripts/startup/function_nodes/sockets.py
index 112fec93224..5cc37c2ff91 100644
--- a/release/scripts/startup/function_nodes/sockets.py
+++ b/release/scripts/startup/function_nodes/sockets.py
@@ -67,6 +67,25 @@ class VectorSocket(bpy.types.NodeSocket, DataSocket):
     def restore_state(self, state):
         self.value = state
 
+class BooleanSocket(bpy.types.NodeSocket, DataSocket):
+    bl_idname = "fn_BooleanSocket"
+    bl_label = "Boolean Socket"
+    socket_color = (0.3, 0.3, 0.3, 1)
+
+    value: BoolProperty(
+        name="Value",
+        default=False,
+    )
+
+    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 CustomColoredSocket(bpy.types.NodeSocket, DataSocket):
     bl_idname = "fn_CustomColoredSocket"
     bl_label = "Custom Colored Socket"
diff --git a/release/scripts/startup/function_nodes/types.py b/release/scripts/startup/function_nodes/types.py
index b0402c911a0..20cfebad978 100644
--- a/release/scripts/startup/function_nodes/types.py
+++ b/release/scripts/startup/function_nodes/types.py
@@ -8,6 +8,7 @@ from . sockets import (
     FloatSocket,
     IntegerSocket,
     VectorSocket,
+    BooleanSocket,
     CustomColoredSocket,
 )
 
@@ -16,6 +17,7 @@ type_infos = DataTypesInfo()
 type_infos.insert_data_type("Float", UniqueSocketBuilder(FloatSocket))
 type_infos.insert_data_type("Vector", UniqueSocketBuilder(VectorSocket))
 type_infos.insert_data_type("Integer", UniqueSocketBuilder(IntegerSocket))
+type_infos.insert_data_type("Boolean", UniqueSocketBuilder(BooleanSocket))
 type_infos.insert_data_type("Float List", ColoredSocketBuilder((0, 0.3, 0.5, 0.5)))
 type_infos.insert_data_type("Vector List", ColoredSocketBuilder((0, 0, 0.5, 0.5)))
 type_infos.insert_data_type("Integer List", ColoredSocketBuilder((0.3, 0.7, 0.5, 0.5)))
diff --git a/source/blender/functions/CMakeLists.txt b/source/blender/functions/CMakeLists.txt
index ef064a1e6ed..7de4916e4bf 100644
--- a/source/blender/functions/CMakeLists.txt
+++ b/source/blender/functions/CMakeLists.txt
@@ -69,8 +69,10 @@ set(SRC
 	types/lists.hpp
 	types/numeric_lists.hpp
 	types/numeric_lists.cpp
-	types/numeric.cpp
 	types/numeric.hpp
+	types/numeric.cpp
+	types/boolean.hpp
+	types/boolean.cpp
 
 	functions/object_input.hpp
 	functions/object_input.cpp
diff --git a/source/blender/functions/FN_types.hpp b/source/blender/functions/FN_types.hpp
index 3c03f8c7259..13540b6a771 100644
--- a/source/blender/functions/FN_types.hpp
+++ b/source/blender/functions/FN_types.hpp
@@ -1,4 +1,5 @@
 #pragma once
 
 #include "types/numeric.hpp"
-#include "types/numeric_lists.hpp"
\ No newline at end of file
+#include "types/numeric_lists.hpp"
+#include "types/boolean.hpp"
\ No newline at end of file
diff --git a/source/blender/functions/frontends/data_flow_nodes/builder.cpp b/source/blender/functions/frontends/data_flow_nodes/builder.cpp
index adef08cbab8..502d45e3ba2 100644
--- a/source/blender/functions/frontends/data_flow_nodes/builder.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/builder.cpp
@@ -140,6 +140,9 @@ namespace FN { namespace DataFlowNodes {
 		else if (STREQ(data_type, "Vector")) {
 			return Types::get_fvec3_type();
 		}
+		else if (STREQ(data_type, "Boolean")) {
+			return Types::get_bool_type();
+		}
 		else if (STREQ(data_type, "Float List")) {
 			return Types::get_float_list_type();
 		}
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp b/source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp
index 0453dd4ad11..ec735fa7996 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp
@@ -26,6 +26,12 @@ namespace FN { namespace DataFlowNodes {
 		tuple.set<int32_t>(index, value);
 	}
 
+	static void load_boolean(PointerRNA *ptr, Tuple &tuple, uint index)
+	{
+		bool value = RNA_boolean_get(ptr, "value");
+		tuple.set<bool>(index, value);
+	}
+
 	template<typename T>
 	static void load_empty_list(PointerRNA *UNUSED(ptr), Tuple &tuple, uint index)
 	{
@@ -38,6 +44,7 @@ namespace FN { namespace DataFlowNodes {
 		inserters.reg_socket_loader("Float", load_float);
 		inserters.reg_socket_loader("Vector", load_vector);
 		inserters.reg_socket_loader("Integer", load_integer);
+		inserters.reg_socket_loader("Boolean", load_boolean);
 		inserters.reg_socket_loader("Float List", load_empty_list<float>);
 		inserters.reg_socket_loader("Vector List", load_empty_list<Types::Vector>);
 		inserters.reg_socket_loader("Integer List", load_empty_list<int32_t>);
diff --git a/source/blender/functions/types/boolean.cpp b/source/blender/functions/types/boolean.cpp
new file mode 100644
index 00000000000..5d6c184f8fa
--- /dev/null
+++ b/source/blender/functions/types/boolean.cpp
@@ -0,0 +1,68 @@
+#include "boolean.hpp"
+
+#include "BLI_lazy_init.hpp"
+
+#include "FN_tuple_call.hpp"
+#include "FN_llvm.hpp"
+
+namespace FN { namespace Types {
+
+	class LLVMBool : public LLVMTypeInfo {
+
+		llvm::Type *create_type(
+			llvm::LLVMContext &context) const override
+		{
+			return llvm::Type::getInt1Ty(context);
+		}
+
+		llvm::Value *build_copy_ir(
+			llvm::IRBuilder<> &UNUSED(builder),
+			llvm::Value *value) const override
+		{
+			return value;
+		}
+
+		void build_free_ir(
+			llvm::IRBuilder<> &UNUSED(builder),
+			llvm::Value *UNUSED(value)) const override
+		{
+			return;
+		}
+
+		void build_store_ir__relocate(
+			llvm::IRBuilder<> &builder,
+			llvm::Value *value,
+			llvm::Value *byte_addr) const override
+		{
+			llvm::Value *byte_value = builder.CreateIntCast(
+				value, builder.getInt8Ty(), false);
+			builder.CreateStore(byte_value, byte_addr, false);
+		}
+
+		llvm::Value *build_load_ir__copy(
+			llvm::IRBuilder<> &builder,
+			llvm::Value *byte_addr) const override
+		{
+			llvm::Value *byte_value = builder.CreateLoad(byte_addr);
+			llvm::Value *value = builder.CreateIntCast(
+				byte_value, builder.getInt1Ty(), false);
+			return value;
+		}
+
+		llvm::Value *build_load_ir__relocate(
+			llvm::IRBuilder<> &builder,
+			llvm::Value *byte_addr) const override
+		{
+			return this->build_load_ir__copy(builder, byte_addr);
+		}
+	};
+
+	LAZY_INIT_REF__NO_ARG(SharedType, get_bool_type)
+	{
+		SharedType type = SharedType::New("Bool");
+		type->extend(new CPPTypeInfoForType<bool>());
+		type->extend(new LLVMBool());
+		return type;
+	}
+
+} } /* namespace FN::Types */
\ No newline at end of file
diff --git a/source/blender/functions/types/boolean.hpp b/source/blender/functions/types/boolean.hpp
new file mode 100644
index 00000000000..ebad860abc6
--- /dev/null
+++ b/source/blender/functions/types/boolean.hpp
@@ -0,0 +1,9 @@
+#pragma once
+
+#include "../FN_core.hpp"
+
+namespace FN { namespace Types {
+
+	SharedType &get_bool_type();
+
+} } /* namespace FN::Types */
\ No newline at end of file



More information about the Bf-blender-cvs mailing list