forked from blender/blender
Support group nodes #22
@ -2,8 +2,8 @@
|
|||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-or-later */
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
|
|
||||||
#include "node_parser.h"
|
|
||||||
#include "group_nodes.h"
|
#include "group_nodes.h"
|
||||||
|
#include "node_parser.h"
|
||||||
|
|
||||||
#include "BLI_vector.hh"
|
#include "BLI_vector.hh"
|
||||||
|
|
||||||
@ -27,10 +27,14 @@ NodeItem GroupNodeParser::compute()
|
|||||||
group_graph = graph_->addChild<MaterialX::NodeGraph>(name);
|
group_graph = graph_->addChild<MaterialX::NodeGraph>(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeItem out =
|
NodeItem out = GroupOutputNodeParser(group_graph.get(),
|
||||||
GroupOutputNodeParser(
|
depsgraph_,
|
||||||
group_graph.get(), depsgraph_, material_, node_out, socket_out_, NodeItem::Type::Any, this)
|
material_,
|
||||||
.compute_full();
|
node_out,
|
||||||
|
socket_out_,
|
||||||
|
NodeItem::Type::Any,
|
||||||
|
this)
|
||||||
|
.compute_full();
|
||||||
|
|
||||||
/* We have to be in NodeParser's graph_, therefore copying output */
|
/* We have to be in NodeParser's graph_, therefore copying output */
|
||||||
res.output = out.output;
|
res.output = out.output;
|
||||||
@ -55,6 +59,7 @@ NodeItem GroupOutputNodeParser::compute()
|
|||||||
outputs.append(create_output("output" + std::to_string(i + 1), values[i]));
|
outputs.append(create_output("output" + std::to_string(i + 1), values[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return outputs[socket_out_->index()];
|
return outputs[socket_out_->index()];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,7 +86,14 @@ NodeItem GroupOutputNodeParser::compute_full()
|
|||||||
|
|
||||||
NodeItem GroupInputNodeParser::compute()
|
NodeItem GroupInputNodeParser::compute()
|
||||||
{
|
{
|
||||||
return group_parser_->get_input_default(socket_out_->index(), to_type_);
|
NodeItem value = group_parser_->get_input_value(socket_out_->index(), to_type_);
|
||||||
|
if (value.value) {
|
||||||
|
NodeItem constant = create_node("constant", value.type());
|
||||||
|
constant.set_input("value", value);
|
||||||
|
value = constant;
|
||||||
|
}
|
||||||
|
|
||||||
|
return create_input("input" + std::to_string(socket_out_->index() + 1), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeItem GroupInputNodeParser::compute_full()
|
NodeItem GroupInputNodeParser::compute_full()
|
||||||
@ -89,8 +101,8 @@ NodeItem GroupInputNodeParser::compute_full()
|
|||||||
NodeItem res = empty();
|
NodeItem res = empty();
|
||||||
|
|
||||||
/* Checking if output was already computed */
|
/* Checking if output was already computed */
|
||||||
res.output = graph_->getOutput("output" + std::to_string(socket_out_->index() + 1));
|
res.input = graph_->getInput("input" + std::to_string(socket_out_->index() + 1));
|
||||||
if (res.output) {
|
if (res.input) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user