diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2016-07-21 03:50:30 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2016-07-21 03:56:17 +0300 |
commit | 1c6b8c6675b060bbdcbe40c2224e916536c00b49 (patch) | |
tree | bd1f14f1d832628c97470b317805e3253fb5fe24 /intern/cycles | |
parent | 97ef8777fcd2228e1787d79572b5491387a3eeee (diff) |
Fix Cycles OSL script node not working in shader using bump, after node type refactoring.
Diffstat (limited to 'intern/cycles')
-rw-r--r-- | intern/cycles/render/nodes.cpp | 18 | ||||
-rw-r--r-- | intern/cycles/render/nodes.h | 2 |
2 files changed, 14 insertions, 6 deletions
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index 66c92bda54b..e26084c690b 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -5062,12 +5062,10 @@ OSLNode::~OSLNode() ShaderNode *OSLNode::clone() const { - OSLNode *node = new OSLNode(*this); - node->type = new NodeType(*type); - return node; + return OSLNode::create(this->inputs.size(), this); } -OSLNode* OSLNode::create(size_t num_inputs) +OSLNode* OSLNode::create(size_t num_inputs, const OSLNode *from) { /* allocate space for the node itself and parameters, aligned to 16 bytes * assuming that's the most parameter types need */ @@ -5077,7 +5075,17 @@ OSLNode* OSLNode::create(size_t num_inputs) char *node_memory = (char*) operator new(node_size + inputs_size); memset(node_memory, 0, node_size + inputs_size); - return new(node_memory) OSLNode(); + if (!from) { + return new(node_memory) OSLNode(); + } + else { + /* copy input default values and node type for cloning */ + memcpy(node_memory + node_size, (char*)from + node_size, inputs_size); + + OSLNode *node = new(node_memory) OSLNode(*from); + node->type = new NodeType(*(from->type)); + return node; + } } char* OSLNode::input_default_value() diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h index c98ff6f278d..caad11af0f8 100644 --- a/intern/cycles/render/nodes.h +++ b/intern/cycles/render/nodes.h @@ -921,7 +921,7 @@ public: class OSLNode : public ShaderNode { public: - static OSLNode *create(size_t num_inputs); + static OSLNode *create(size_t num_inputs, const OSLNode *from = NULL); ~OSLNode(); ShaderNode *clone() const; |