[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