forked from blender/blender
Parsing Improvements #14
@ -104,7 +104,7 @@ NodeItem NodeItem::operator+(const NodeItem &other) const
|
|||||||
/* Special case: add BSDF/EDF shaders */
|
/* Special case: add BSDF/EDF shaders */
|
||||||
NodeItem res = empty();
|
NodeItem res = empty();
|
||||||
if (other.type() == type) {
|
if (other.type() == type) {
|
||||||
res.node = graph_->addNode("add", MaterialX::EMPTY_STRING, this->type(type));
|
res = create_node("add", type);
|
||||||
res.set_input("in1", *this);
|
res.set_input("in1", *this);
|
||||||
res.set_input("in2", other);
|
res.set_input("in2", other);
|
||||||
}
|
}
|
||||||
@ -135,7 +135,7 @@ NodeItem NodeItem::operator*(const NodeItem &other) const
|
|||||||
NodeItem res = empty();
|
NodeItem res = empty();
|
||||||
Type other_type = other.type();
|
Type other_type = other.type();
|
||||||
if (ELEM(other_type, Type::Float, Type::Color3)) {
|
if (ELEM(other_type, Type::Float, Type::Color3)) {
|
||||||
res.node = graph_->addNode("multiply", MaterialX::EMPTY_STRING, this->type(type));
|
res = create_node("multiply", type);
|
||||||
res.set_input("in1", *this);
|
res.set_input("in1", *this);
|
||||||
res.set_input("in2", other);
|
res.set_input("in2", other);
|
||||||
}
|
}
|
||||||
@ -349,7 +349,7 @@ NodeItem NodeItem::exp() const
|
|||||||
NodeItem NodeItem::extract(const int index) const
|
NodeItem NodeItem::extract(const int index) const
|
||||||
{
|
{
|
||||||
NodeItem res = empty();
|
NodeItem res = empty();
|
||||||
res.node = graph_->addNode("extract", MaterialX::EMPTY_STRING, "float");
|
res = create_node("extract", Type::Float);
|
||||||
res.set_input("in", *this);
|
res.set_input("in", *this);
|
||||||
res.set_input("index", val(index));
|
res.set_input("index", val(index));
|
||||||
return res;
|
return res;
|
||||||
@ -533,7 +533,7 @@ NodeItem NodeItem::convert(Type to_type) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
res.node = graph_->addNode("convert", MaterialX::EMPTY_STRING, type(to_type));
|
res = create_node("convert", to_type);
|
||||||
res.set_input("in", *this);
|
res.set_input("in", *this);
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
@ -590,7 +590,7 @@ NodeItem NodeItem::if_else(CompareOp op,
|
|||||||
res = func(value->asA<float>(), other.value->asA<float>()) ? item1 : item2;
|
res = func(value->asA<float>(), other.value->asA<float>()) ? item1 : item2;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
res.node = graph_->addNode(category, MaterialX::EMPTY_STRING, type(to_type));
|
res = create_node(category, to_type);
|
||||||
res.set_input("value1", *this);
|
res.set_input("value1", *this);
|
||||||
res.set_input("value2", other);
|
res.set_input("value2", other);
|
||||||
res.set_input("in1", item1);
|
res.set_input("in1", item1);
|
||||||
@ -616,12 +616,13 @@ NodeItem::Type NodeItem::type() const
|
|||||||
return Type::Empty;
|
return Type::Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeItem NodeItem::create_node(const std::string &category, NodeItem::Type type)
|
NodeItem NodeItem::create_node(const std::string &category, NodeItem::Type type) const
|
||||||
{
|
{
|
||||||
std::string type_str = this->type(type);
|
std::string type_str = this->type(type);
|
||||||
CLOG_INFO(LOG_MATERIALX_SHADER, 2, "<%s type=%s>", category.c_str(), type_str.c_str());
|
CLOG_INFO(LOG_MATERIALX_SHADER, 2, "<%s type=%s>", category.c_str(), type_str.c_str());
|
||||||
node = graph_->addNode(category, MaterialX::EMPTY_STRING, type_str);
|
NodeItem res = empty();
|
||||||
return *this;
|
res.node = graph_->addNode(category, MaterialX::EMPTY_STRING, type_str);
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NodeItem::set_input(const std::string &in_name, const NodeItem &item)
|
void NodeItem::set_input(const std::string &in_name, const NodeItem &item)
|
||||||
@ -763,7 +764,7 @@ NodeItem NodeItem::arithmetic(const std::string &category, std::function<float(f
|
|||||||
else {
|
else {
|
||||||
/* TODO: Some of math functions (sin, cos, ...) doesn't work with Color types,
|
/* TODO: Some of math functions (sin, cos, ...) doesn't work with Color types,
|
||||||
* we have to convert to Vector */
|
* we have to convert to Vector */
|
||||||
res.node = graph_->addNode(category, MaterialX::EMPTY_STRING, this->type(type));
|
res = create_node(category, type);
|
||||||
res.set_input("in", *this);
|
res.set_input("in", *this);
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
@ -829,7 +830,7 @@ NodeItem NodeItem::arithmetic(const NodeItem &other,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
res.node = graph_->addNode(category, MaterialX::EMPTY_STRING, type(to_type));
|
res = create_node(category, to_type);
|
||||||
res.set_input("in1", item1);
|
res.set_input("in1", item1);
|
||||||
res.set_input("in2", item2);
|
res.set_input("in2", item2);
|
||||||
}
|
}
|
||||||
|
@ -97,7 +97,7 @@ class NodeItem {
|
|||||||
NodeItem empty() const;
|
NodeItem empty() const;
|
||||||
template<class T> NodeItem val(const T &data) const;
|
template<class T> NodeItem val(const T &data) const;
|
||||||
Type type() const;
|
Type type() const;
|
||||||
NodeItem create_node(const std::string &category, NodeItem::Type type);
|
NodeItem create_node(const std::string &category, NodeItem::Type type) const;
|
||||||
|
|
||||||
/* Functions to set input and output */
|
/* Functions to set input and output */
|
||||||
template<class T> void set_input(const std::string &in_name, const T &value, Type in_type);
|
template<class T> void set_input(const std::string &in_name, const T &value, Type in_type);
|
||||||
|
Loading…
Reference in New Issue
Block a user