forked from blender/blender
Parsing Improvements #14
@ -617,53 +617,59 @@ NodeItem::Type NodeItem::type() const
|
||||
return Type::Empty;
|
||||
}
|
||||
|
||||
void NodeItem::set_input(const std::string &name,
|
||||
const NodeItem &item,
|
||||
const std::string &output_name)
|
||||
void NodeItem::set_input(const std::string &in_name, const NodeItem &item)
|
||||
{
|
||||
if (item.value) {
|
||||
Type item_type = item.type();
|
||||
std::string mx_type = type(item_type);
|
||||
switch (item_type) {
|
||||
case Type::String:
|
||||
set_input(name, item.value->asA<std::string>(), mx_type);
|
||||
set_input(in_name, item.value->asA<std::string>(), mx_type);
|
||||
break;
|
||||
case Type::Integer:
|
||||
set_input(name, item.value->asA<int>(), mx_type);
|
||||
set_input(in_name, item.value->asA<int>(), mx_type);
|
||||
break;
|
||||
case Type::Float:
|
||||
set_input(name, item.value->asA<float>(), mx_type);
|
||||
set_input(in_name, item.value->asA<float>(), mx_type);
|
||||
break;
|
||||
case Type::Vector2:
|
||||
set_input(name, item.value->asA<MaterialX::Vector2>(), mx_type);
|
||||
set_input(in_name, item.value->asA<MaterialX::Vector2>(), mx_type);
|
||||
break;
|
||||
case Type::Vector3:
|
||||
set_input(name, item.value->asA<MaterialX::Vector3>(), mx_type);
|
||||
set_input(in_name, item.value->asA<MaterialX::Vector3>(), mx_type);
|
||||
break;
|
||||
case Type::Vector4:
|
||||
set_input(name, item.value->asA<MaterialX::Vector4>(), mx_type);
|
||||
set_input(in_name, item.value->asA<MaterialX::Vector4>(), mx_type);
|
||||
break;
|
||||
case Type::Color3:
|
||||
set_input(name, item.value->asA<MaterialX::Color3>(), mx_type);
|
||||
set_input(in_name, item.value->asA<MaterialX::Color3>(), mx_type);
|
||||
break;
|
||||
case Type::Color4:
|
||||
set_input(name, item.value->asA<MaterialX::Color4>(), mx_type);
|
||||
set_input(in_name, item.value->asA<MaterialX::Color4>(), mx_type);
|
||||
break;
|
||||
default:
|
||||
BLI_assert_unreachable();
|
||||
}
|
||||
}
|
||||
else if (item.node) {
|
||||
node->setConnectedNode(name, item.node);
|
||||
if (output_name != "") {
|
||||
node->setConnectedOutput(name, item.node->getOutput(output_name));
|
||||
}
|
||||
node->setConnectedNode(in_name, item.node);
|
||||
}
|
||||
else {
|
||||
CLOG_WARN(LOG_MATERIALX_SHADER, "Empty item to input: %s", name.c_str());
|
||||
CLOG_WARN(LOG_MATERIALX_SHADER, "Empty item to input: %s", in_name.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
void NodeItem::set_input_output(const std::string &in_name,
|
||||
const NodeItem &item,
|
||||
const std::string &out_name)
|
||||
{
|
||||
if (!item.node) {
|
||||
BLI_assert_unreachable();
|
||||
}
|
||||
node->setConnectedNode(in_name, item.node);
|
||||
node->setConnectedOutput(in_name, item.node->getOutput(out_name));
|
||||
}
|
||||
|
||||
void NodeItem::add_output(const std::string &name, Type out_type)
|
||||
{
|
||||
node->addOutput(name, type(out_type));
|
||||
|
@ -101,9 +101,10 @@ class NodeItem {
|
||||
/* Functions to set input and output */
|
||||
template<class T>
|
||||
void set_input(const std::string &in_name, const T &value, const std::string &in_type);
|
||||
void set_input(const std::string &in_name,
|
||||
void set_input(const std::string &in_name, const NodeItem &item);
|
||||
void set_input_output(const std::string &in_name,
|
||||
const NodeItem &item,
|
||||
const std::string &out_name = "");
|
||||
const std::string &out_name);
|
||||
void add_output(const std::string &in_name, Type out_type);
|
||||
|
||||
private:
|
||||
|
Loading…
Reference in New Issue
Block a user