Merged revision(s) 57671-57767 from trunk/blender into soc-2013-dingto
This commit is contained in:
@@ -199,7 +199,7 @@ void ShaderGraph::connect(ShaderOutput *from, ShaderInput *to)
|
||||
}
|
||||
|
||||
/* add automatic conversion node in case of type mismatch */
|
||||
ShaderNode *convert = add(new ConvertNode(from->type, to->type));
|
||||
ShaderNode *convert = add(new ConvertNode(from->type, to->type, true));
|
||||
|
||||
connect(from, convert->inputs[0]);
|
||||
connect(convert->outputs[0], to);
|
||||
@@ -341,6 +341,24 @@ void ShaderGraph::remove_unneeded_nodes()
|
||||
}
|
||||
else {
|
||||
foreach(ShaderInput *to, links) {
|
||||
/* remove any autoconvert nodes too if they lead to
|
||||
* sockets with an automatically set default value */
|
||||
ShaderNode *tonode = to->parent;
|
||||
|
||||
if(tonode->special_type == SHADER_SPECIAL_TYPE_AUTOCONVERT) {
|
||||
bool all_links_removed = true;
|
||||
|
||||
foreach(ShaderInput *autoin, tonode->outputs[0]->links) {
|
||||
if(autoin->default_value == ShaderInput::NONE)
|
||||
all_links_removed = false;
|
||||
else
|
||||
disconnect(autoin);
|
||||
}
|
||||
|
||||
if(all_links_removed)
|
||||
removed[tonode->id] = true;
|
||||
}
|
||||
|
||||
disconnect(to);
|
||||
|
||||
/* transfer the default input value to the target socket */
|
||||
@@ -352,10 +370,10 @@ void ShaderGraph::remove_unneeded_nodes()
|
||||
removed[proxy->id] = true;
|
||||
any_node_removed = true;
|
||||
}
|
||||
|
||||
/* remove useless mix closures nodes */
|
||||
if(node->special_type == SHADER_SPECIAL_TYPE_MIX_CLOSURE) {
|
||||
else if(node->special_type == SHADER_SPECIAL_TYPE_MIX_CLOSURE) {
|
||||
MixClosureNode *mix = static_cast<MixClosureNode*>(node);
|
||||
|
||||
/* remove useless mix closures nodes */
|
||||
if(mix->outputs[0]->links.size() && mix->inputs[1]->link == mix->inputs[2]->link) {
|
||||
ShaderOutput *output = mix->inputs[1]->link;
|
||||
vector<ShaderInput*> inputs = mix->outputs[0]->links;
|
||||
@@ -370,15 +388,11 @@ void ShaderGraph::remove_unneeded_nodes()
|
||||
connect(output, input);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* remove unused mix closure input when factor is 0.0 or 1.0 */
|
||||
if(node->special_type == SHADER_SPECIAL_TYPE_MIX_CLOSURE) {
|
||||
MixClosureNode *mix = static_cast<MixClosureNode*>(node);
|
||||
/* Check for closure links and make sure factor link is disconnected */
|
||||
/* remove unused mix closure input when factor is 0.0 or 1.0 */
|
||||
/* check for closure links and make sure factor link is disconnected */
|
||||
if(mix->outputs[0]->links.size() && mix->inputs[1]->link && mix->inputs[2]->link && !mix->inputs[0]->link) {
|
||||
|
||||
/* Factor 0.0 */
|
||||
/* factor 0.0 */
|
||||
if(mix->inputs[0]->value.x == 0.0f) {
|
||||
ShaderOutput *output = mix->inputs[1]->link;
|
||||
vector<ShaderInput*> inputs = mix->outputs[0]->links;
|
||||
@@ -393,7 +407,7 @@ void ShaderGraph::remove_unneeded_nodes()
|
||||
connect(output, input);
|
||||
}
|
||||
}
|
||||
/* Factor 1.0 */
|
||||
/* factor 1.0 */
|
||||
else if(mix->inputs[0]->value.x == 1.0f) {
|
||||
ShaderOutput *output = mix->inputs[2]->link;
|
||||
vector<ShaderInput*> inputs = mix->outputs[0]->links;
|
||||
|
@@ -75,7 +75,8 @@ enum ShaderBump {
|
||||
enum ShaderNodeSpecialType {
|
||||
SHADER_SPECIAL_TYPE_NONE,
|
||||
SHADER_SPECIAL_TYPE_PROXY,
|
||||
SHADER_SPECIAL_TYPE_MIX_CLOSURE
|
||||
SHADER_SPECIAL_TYPE_MIX_CLOSURE,
|
||||
SHADER_SPECIAL_TYPE_AUTOCONVERT
|
||||
};
|
||||
|
||||
/* Enum
|
||||
|
@@ -1121,12 +1121,15 @@ void MappingNode::compile(OSLCompiler& compiler)
|
||||
|
||||
/* Convert */
|
||||
|
||||
ConvertNode::ConvertNode(ShaderSocketType from_, ShaderSocketType to_)
|
||||
ConvertNode::ConvertNode(ShaderSocketType from_, ShaderSocketType to_, bool autoconvert)
|
||||
: ShaderNode("convert")
|
||||
{
|
||||
from = from_;
|
||||
to = to_;
|
||||
|
||||
if(autoconvert)
|
||||
special_type = SHADER_SPECIAL_TYPE_AUTOCONVERT;
|
||||
|
||||
assert(from != to);
|
||||
|
||||
if(from == SHADER_SOCKET_FLOAT)
|
||||
@@ -1271,7 +1274,7 @@ void ProxyNode::compile(OSLCompiler& compiler)
|
||||
/* BSDF Closure */
|
||||
|
||||
BsdfNode::BsdfNode(bool scattering_)
|
||||
: ShaderNode("subsurface_scattering"), scattering(scattering_)
|
||||
: ShaderNode("bsdf"), scattering(scattering_)
|
||||
{
|
||||
closure = ccl::CLOSURE_BSSRDF_ID;
|
||||
|
||||
|
@@ -182,7 +182,7 @@ public:
|
||||
|
||||
class ConvertNode : public ShaderNode {
|
||||
public:
|
||||
ConvertNode(ShaderSocketType from, ShaderSocketType to);
|
||||
ConvertNode(ShaderSocketType from, ShaderSocketType to, bool autoconvert = false);
|
||||
SHADER_NODE_BASE_CLASS(ConvertNode)
|
||||
|
||||
ShaderSocketType from, to;
|
||||
|
@@ -791,12 +791,16 @@ void Session::update_status_time(bool show_pause, bool show_done)
|
||||
else
|
||||
substatus = string_printf("Path Tracing Sample %d/%d", sample+1, tile_manager.num_samples);
|
||||
|
||||
if(show_pause)
|
||||
if(show_pause) {
|
||||
status = "Paused";
|
||||
else if(show_done)
|
||||
}
|
||||
else if(show_done) {
|
||||
status = "Done";
|
||||
else
|
||||
status = "Rendering";
|
||||
}
|
||||
else {
|
||||
status = substatus;
|
||||
substatus = "";
|
||||
}
|
||||
|
||||
progress.set_status(status, substatus);
|
||||
|
||||
|
Reference in New Issue
Block a user