[Bf-blender-cvs] [1c6b8c6] master: Fix Cycles OSL script node not working in shader using bump, after node type refactoring.
Brecht Van Lommel
noreply at git.blender.org
Thu Jul 21 03:00:45 CEST 2016
Commit: 1c6b8c6675b060bbdcbe40c2224e916536c00b49
Author: Brecht Van Lommel
Date: Thu Jul 21 02:50:30 2016 +0200
Branches: master
https://developer.blender.org/rB1c6b8c6675b060bbdcbe40c2224e916536c00b49
Fix Cycles OSL script node not working in shader using bump, after node type refactoring.
===================================================================
M intern/cycles/render/nodes.cpp
M intern/cycles/render/nodes.h
===================================================================
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index 66c92bd..e26084c 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 c98ff6f..caad11a 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;
More information about the Bf-blender-cvs
mailing list