diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index a2e51713d65..bcaeaa9e6b4 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -4991,6 +4991,13 @@ OSLNode::~OSLNode() delete type; } +ShaderNode *OSLNode::clone() const +{ + OSLNode *node = new OSLNode(*this); + node->type = new NodeType(*type); + return node; +} + OSLNode* OSLNode::create(size_t num_inputs) { /* allocate space for the node itself and parameters, aligned to 16 bytes diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h index 41894dce86a..8d73a94abb5 100644 --- a/intern/cycles/render/nodes.h +++ b/intern/cycles/render/nodes.h @@ -912,11 +912,13 @@ public: static OSLNode *create(size_t num_inputs); ~OSLNode(); + ShaderNode *clone() const; + char* input_default_value(); void add_input(ustring name, SocketType::Type type); void add_output(ustring name, SocketType::Type type); - SHADER_NODE_BASE_CLASS(OSLNode) + SHADER_NODE_NO_CLONE_CLASS(OSLNode) /* ideally we could beter detect this, but we can't query this now */ bool has_spatial_varying() { return true; } @@ -924,9 +926,6 @@ public: string filepath; string bytecode_hash; - -private: - OSLNode(); }; class NormalMapNode : public ShaderNode {