[Bf-blender-cvs] [04f9286] object_nodes: TypeDesc registration in NodeGraph for reusable type definitions.

Lukas Tönne noreply at git.blender.org
Wed Jan 13 14:58:32 CET 2016


Commit: 04f9286c07d864939c36496f29df80ddabc7500d
Author: Lukas Tönne
Date:   Wed Jan 13 14:54:46 2016 +0100
Branches: object_nodes
https://developer.blender.org/rB04f9286c07d864939c36496f29df80ddabc7500d

TypeDesc registration in NodeGraph for reusable type definitions.

Eventually this could allow actual user typedefs (through the API),
but primarily this is to make complex type definitions possible without
having to do a full definition every time, and simply use the type name.

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

M	source/blender/blenvm/compile/bvm_nodegraph.cc
M	source/blender/blenvm/compile/bvm_nodegraph.h
M	source/blender/blenvm/intern/bvm_api.cc
M	source/blender/blenvm/util/bvm_util_typedesc.h

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

diff --git a/source/blender/blenvm/compile/bvm_nodegraph.cc b/source/blender/blenvm/compile/bvm_nodegraph.cc
index 01f2332..4be778f 100644
--- a/source/blender/blenvm/compile/bvm_nodegraph.cc
+++ b/source/blender/blenvm/compile/bvm_nodegraph.cc
@@ -211,25 +211,27 @@ bool NodeType::verify_arguments(Module *module, LLVMContext &context, raw_ostrea
 #endif
 
 const NodeInput *NodeType::add_input(const string &name,
-                                     const TypeDesc &typedesc,
+                                     const string &type,
                                      Value *default_value,
                                      BVMInputValueType value_type)
 {
 	BLI_assert(!find_input(name));
+	BLI_assert(NodeGraph::has_typedef(type));
 	/* function inputs only allowed for kernel nodes */
 	BLI_assert(m_is_kernel_node || value_type != INPUT_EXPRESSION);
-	m_inputs.push_back(NodeInput(name, typedesc, default_value, value_type));
+	m_inputs.push_back(NodeInput(name, NodeGraph::find_typedef(type), default_value, value_type));
 	return &m_inputs.back();
 }
 
 const NodeOutput *NodeType::add_output(const string &name,
-                                       const TypeDesc &typedesc,
+                                       const string &type,
                                        BVMOutputValueType value_type)
 {
 	BLI_assert(!find_output(name));
+	BLI_assert(NodeGraph::has_typedef(type));
 	/* local outputs only allowed for kernel nodes */
 	BLI_assert(m_is_kernel_node || value_type != OUTPUT_LOCAL);
-	m_outputs.push_back(NodeOutput(name, typedesc, value_type));
+	m_outputs.push_back(NodeOutput(name, NodeGraph::find_typedef(type), value_type));
 	return &m_outputs.back();
 }
 
@@ -595,8 +597,38 @@ void NodeBlock::prune(const NodeSet &used_nodes)
 
 /* ------------------------------------------------------------------------- */
 
+NodeGraph::TypeDefMap NodeGraph::typedefs;
 NodeGraph::NodeTypeMap NodeGraph::node_types;
 
+const TypeDesc &NodeGraph::find_typedef(const string &name)
+{
+	return typedefs.at(name);
+}
+
+bool NodeGraph::has_typedef(const string &name)
+{
+	return typedefs.find(name) != typedefs.end();
+}
+
+TypeDesc *NodeGraph::add_typedef(const string &name, BVMType base_type)
+{
+	std::pair<TypeDefMap::iterator, bool> result =
+	        typedefs.insert(TypeDefPair(name, TypeDesc(base_type)));
+	if (result.second) {
+		TypeDesc *typedesc = &result.first->second;
+		return typedesc;
+	}
+	else
+		return NULL;
+}
+
+void NodeGraph::remove_typedef(const string &name)
+{
+	TypeDefMap::iterator it = typedefs.find(name);
+	if (it != typedefs.end())
+		typedefs.erase(it);
+}
+
 const NodeType *NodeGraph::find_node_type(const string &name)
 {
 	NodeTypeMap::const_iterator it = node_types.find(name);
@@ -738,16 +770,18 @@ void NodeGraph::set_output_socket(const string &name, const OutputKey &key)
 	}
 }
 
-const NodeGraph::Input *NodeGraph::add_input(const string &name, const TypeDesc &typedesc)
+const NodeGraph::Input *NodeGraph::add_input(const string &name, const string &type)
 {
 	BLI_assert(!get_input(name));
+	const TypeDesc &typedesc = find_typedef(type);
 	inputs.push_back(Input(name, typedesc, add_argument_node(typedesc)));
 	return &inputs.back();
 }
 
-const NodeGraph::Output *NodeGraph::add_output(const string &name, const TypeDesc &typedesc, Value *default_value)
+const NodeGraph::Output *NodeGraph::add_output(const string &name, const string &type, Value *default_value)
 {
 	BLI_assert(!get_output(name));
+	const TypeDesc &typedesc = find_typedef(type);
 	outputs.push_back(Output(name, typedesc, add_proxy(typedesc, default_value)->output(0)));
 	return &outputs.back();
 }
@@ -1156,6 +1190,57 @@ void NodeGraph::finalize()
 
 /* ------------------------------------------------------------------------- */
 
+static void register_typedefs()
+{
+	TypeDesc *t;
+	
+	t = NodeGraph::add_typedef("FLOAT", BVM_FLOAT);
+	
+	t = NodeGraph::add_typedef("FLOAT3", BVM_FLOAT3);
+	
+	t = NodeGraph::add_typedef("FLOAT4", BVM_FLOAT4);
+	
+	t = NodeGraph::add_typedef("INT", BVM_INT);
+	
+	t = NodeGraph::add_typedef("MATRIX44", BVM_MATRIX44);
+	
+	t = NodeGraph::add_typedef("STRING", BVM_STRING);
+	
+	t = NodeGraph::add_typedef("POINTER", BVM_POINTER);
+	
+	t = NodeGraph::add_typedef("MESH", BVM_MESH);
+	
+	t = NodeGraph::add_typedef("DUPLIS", BVM_DUPLIS);
+	
+	
+	t = NodeGraph::add_typedef("FLOAT_ARRAY", BVM_FLOAT);
+	t->buffer_type = BVM_BUFFER_ARRAY;
+	
+	t = NodeGraph::add_typedef("FLOAT3_ARRAY", BVM_FLOAT3);
+	t->buffer_type = BVM_BUFFER_ARRAY;
+	
+	t = NodeGraph::add_typedef("FLOAT4_ARRAY", BVM_FLOAT4);
+	t->buffer_type = BVM_BUFFER_ARRAY;
+	
+	t = NodeGraph::add_typedef("INT_ARRAY", BVM_INT);
+	t->buffer_type = BVM_BUFFER_ARRAY;
+	
+	t = NodeGraph::add_typedef("MATRIX44_ARRAY", BVM_MATRIX44);
+	t->buffer_type = BVM_BUFFER_ARRAY;
+	
+	t = NodeGraph::add_typedef("STRING_ARRAY", BVM_STRING);
+	t->buffer_type = BVM_BUFFER_ARRAY;
+	
+	t = NodeGraph::add_typedef("POINTER_ARRAY", BVM_POINTER);
+	t->buffer_type = BVM_BUFFER_ARRAY;
+	
+	t = NodeGraph::add_typedef("MESH_ARRAY", BVM_MESH);
+	t->buffer_type = BVM_BUFFER_ARRAY;
+	
+	t = NodeGraph::add_typedef("DUPLIS_ARRAY", BVM_DUPLIS);
+	t->buffer_type = BVM_BUFFER_ARRAY;
+}
+
 OpCode get_opcode_from_node_type(const string &node)
 {
 	#define NODETYPE(name) \
@@ -1282,181 +1367,181 @@ static void register_opcode_node_types()
 	NodeType *nt;
 	
 	nt = NodeGraph::add_function_node_type("FLOAT_TO_INT");
-	nt->add_input("value", TYPE_FLOAT, 0.0f);
-	nt->add_output("value", TYPE_INT);
+	nt->add_input("value", "FLOAT", 0.0f);
+	nt->add_output("value", "INT");
 	
 	nt = NodeGraph::add_function_node_type("INT_TO_FLOAT");
-	nt->add_input("value", TYPE_INT, 0);
-	nt->add_output("value", TYPE_FLOAT);
+	nt->add_input("value", "INT", 0);
+	nt->add_output("value", "FLOAT");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_FLOAT");
-	nt->add_input("value", TYPE_FLOAT, 0.0f);
-	nt->add_output("value", TYPE_FLOAT);
+	nt->add_input("value", "FLOAT", 0.0f);
+	nt->add_output("value", "FLOAT");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_FLOAT3");
-	nt->add_input("value", TYPE_FLOAT3, float3(0.0f, 0.0f, 0.0f));
-	nt->add_output("value", TYPE_FLOAT3);
+	nt->add_input("value", "FLOAT3", float3(0.0f, 0.0f, 0.0f));
+	nt->add_output("value", "FLOAT3");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_FLOAT4");
-	nt->add_input("value", TYPE_FLOAT4, float4(0.0f, 0.0f, 0.0f, 0.0f));
-	nt->add_output("value", TYPE_FLOAT4);
+	nt->add_input("value", "FLOAT4", float4(0.0f, 0.0f, 0.0f, 0.0f));
+	nt->add_output("value", "FLOAT4");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_INT");
-	nt->add_input("value", TYPE_INT, 0);
-	nt->add_output("value", TYPE_INT);
+	nt->add_input("value", "INT", 0);
+	nt->add_output("value", "INT");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_MATRIX44");
-	nt->add_input("value", TYPE_MATRIX44, matrix44::identity());
-	nt->add_output("value", TYPE_MATRIX44);
+	nt->add_input("value", "MATRIX44", matrix44::identity());
+	nt->add_output("value", "MATRIX44");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_STRING");
-	nt->add_input("value", TYPE_STRING, "");
-	nt->add_output("value", TYPE_STRING);
+	nt->add_input("value", "STRING", "");
+	nt->add_output("value", "STRING");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_POINTER");
-	nt->add_input("value", TYPE_POINTER, PointerRNA_NULL);
-	nt->add_output("value", TYPE_POINTER);
+	nt->add_input("value", "POINTER", PointerRNA_NULL);
+	nt->add_output("value", "POINTER");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_MESH");
-	nt->add_input("value", TYPE_MESH, __empty_mesh__);
-	nt->add_output("value", TYPE_MESH);
+	nt->add_input("value", "MESH", __empty_mesh__);
+	nt->add_output("value", "MESH");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_DUPLIS");
-	nt->add_input("value", TYPE_DUPLIS, duplis_ptr(__empty_duplilist__));
-	nt->add_output("value", TYPE_DUPLIS);
+	nt->add_input("value", "DUPLIS", duplis_ptr(__empty_duplilist__));
+	nt->add_output("value", "DUPLIS");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_FLOAT_ARRAY");
-	nt->add_input("value", TYPE_FLOAT_ARRAY, array<BVM_FLOAT>());
-	nt->add_output("value", TYPE_FLOAT_ARRAY);
+	nt->add_input("value", "FLOAT_ARRAY", array<BVM_FLOAT>());
+	nt->add_output("value", "FLOAT_ARRAY");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_FLOAT3_ARRAY");
-	nt->add_input("value", TYPE_FLOAT3_ARRAY, array<BVM_FLOAT3>());
-	nt->add_output("value", TYPE_FLOAT3_ARRAY);
+	nt->add_input("value", "FLOAT3_ARRAY", array<BVM_FLOAT3>());
+	nt->add_output("value", "FLOAT3_ARRAY");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_FLOAT4_ARRAY");
-	nt->add_input("value", TYPE_FLOAT4_ARRAY, array<BVM_FLOAT4>());
-	nt->add_output("value", TYPE_FLOAT4_ARRAY);
+	nt->add_input("value", "FLOAT4_ARRAY", array<BVM_FLOAT4>());
+	nt->add_output("value", "FLOAT4_ARRAY");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_INT_ARRAY");
-	nt->add_input("value", TYPE_INT_ARRAY, array<BVM_INT>());
-	nt->add_output("value", TYPE_INT_ARRAY);
+	nt->add_input("value", "INT_ARRAY", array<BVM_INT>());
+	nt->add_output("value", "INT_ARRAY");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_MATRIX44_ARRAY");
-	nt->add_input("value", TYPE_MATRIX44_ARRAY, array<BVM_MATRIX44>());
-	nt->add_output("value", TYPE_MATRIX44_ARRAY);
+	nt->add_input("value", "MATRIX44_ARRAY", array<BVM_MATRIX44>());
+	nt->add_output("value", "MATRIX44_ARRAY");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_STRING_ARRAY");
-	nt->add_input("value", TYPE_STRING_ARRAY, array<BVM_STRING>());
-	nt->add_output("value", TYPE_STRING_ARRAY);
+	nt->add_input("value", "STRING_ARRAY", array<BVM_STRING>());
+	nt->add_output("value", "STRING_ARRAY");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_POINTER_ARRAY");
-	nt->add_input("value", TYPE_POINTER_ARRAY, array<BVM_POINTER>());
-	nt->add_output("value", TYPE_POINTER_ARRAY);
+	nt->add_input("value", "POINTER_ARRAY", array<BVM_POINTER>());
+	nt->add_output("value", "POINTER_ARRAY");
 	
 	nt = NodeGraph::add_pass_node_type("PASS_MESH_ARRAY");
-	nt->add_input("value", TYPE_MESH_ARRAY, array<BVM_MESH>());
-	nt->add_output("value", TYPE_MESH_ARRAY);
+	nt->add_input("value", "MESH_ARRAY", array<BVM_MESH>());
+	nt->add_output("value", "MESH_ARRAY");
 	
 	nt = NodeGraph::add_pass_node_typ

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list