Fix T63415: no Cycles displacement update when updating OSL code

This commit is contained in:
Brecht Van Lommel 2019-04-21 02:18:19 +02:00
parent a5d5f152dd
commit 543614a17d
Notes: blender-bot 2023-02-14 03:04:12 +01:00
Referenced by issue #63415, Cycles -- OSL Script -- Displacement does not update when pressing "Script Node Update"
4 changed files with 10 additions and 3 deletions

View File

@ -908,7 +908,7 @@ static ShaderNode *add_node(Scene *scene,
static bool node_use_modified_socket_name(ShaderNode *node)
{
if (node->special_type == SHADER_SPECIAL_TYPE_SCRIPT)
if (node->special_type == SHADER_SPECIAL_TYPE_OSL)
return false;
return true;

View File

@ -721,6 +721,13 @@ void ShaderGraph::compute_displacement_hash()
int link_id = (input->link) ? input->link->parent->id : 0;
md5.append((uint8_t *)&link_id, sizeof(link_id));
}
if (node->special_type == SHADER_SPECIAL_TYPE_OSL) {
/* Hash takes into account socket values, to detect changes
* in the code of the node we need an exception. */
OSLNode *oslnode = static_cast<OSLNode *>(node);
md5.append(oslnode->bytecode_hash);
}
}
displacement_hash = md5.get_hex();

View File

@ -61,7 +61,7 @@ enum ShaderNodeSpecialType {
SHADER_SPECIAL_TYPE_PROXY,
SHADER_SPECIAL_TYPE_AUTOCONVERT,
SHADER_SPECIAL_TYPE_GEOMETRY,
SHADER_SPECIAL_TYPE_SCRIPT,
SHADER_SPECIAL_TYPE_OSL,
SHADER_SPECIAL_TYPE_IMAGE_SLOT,
SHADER_SPECIAL_TYPE_CLOSURE,
SHADER_SPECIAL_TYPE_COMBINE_CLOSURE,

View File

@ -5718,7 +5718,7 @@ void SetNormalNode::compile(OSLCompiler &compiler)
OSLNode::OSLNode() : ShaderNode(new NodeType(NodeType::SHADER))
{
special_type = SHADER_SPECIAL_TYPE_SCRIPT;
special_type = SHADER_SPECIAL_TYPE_OSL;
}
OSLNode::~OSLNode()