Skip to content

Commit 655bd40

Browse files
authored
Fix token handling in functional nodegraphs (#2363)
## Issue Tokens on `nodedef`s are not checked when resolving inputs on nodes in a functional nodegraph. ## Change Patch token search to check `nodedef` tokens when applying token resolution
1 parent ddbb672 commit 655bd40

2 files changed

Lines changed: 51 additions & 12 deletions

File tree

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,51 @@
11
<?xml version="1.0"?>
22
<materialx version="1.39">
33
<!-- use tokens which are defined by the parent nodegraph -->
4-
<nodegraph name="Tokenized_Image_2k_png">
5-
<token name="Image_Resolution" type="string" value="2k" uiname="Image Resolution" />
4+
<nodegraph name="Parent_Token_Graph">
5+
<token name="Image_Name" type="string" value="cloth" uiname="Image Name" />
66
<token name="Image_Extension" type="string" value="png" uiname="Image Extension" />
7-
<input name="Image_Filename" type="filename" uniform="true" value="resources/Images/cloth.[Image_Extension]" />
7+
<input name="Image_Filename" type="filename" uniform="true" value="resources/Images/[Image_Name].[Image_Extension]" />
88
<tiledimage name="tiledimage" type="color3" nodedef="ND_tiledimage_color3">
99
<input name="file" type="filename" uniform="true" interfacename="Image_Filename" />
1010
</tiledimage>
11-
<output name="out_png" type="color3" nodename="tiledimage" />
11+
<output name="out" type="color3" nodename="tiledimage" />
1212
</nodegraph>
1313

1414
<!-- use tokens which are sibling of the input -->
15-
<nodegraph name="Tokenized_Image_4k_jpg">
15+
<nodegraph name="Sibling_Token">
1616
<tiledimage name="tiledimage" type="color3" nodedef="ND_tiledimage_color3">
17-
<token name="Image_Resolution" type="string" value="4k" uiname="Image Resolution" />
17+
<token name="Image_Name" type="string" value="wood_color" uiname="Image Resolution" />
1818
<token name="Image_Extension" type="string" value="jpg" uiname="Image Extension" />
19-
<input name="file" type="filename" uniform="true" value="resources/images/cloth.[Image_Extension]" />
19+
<input name="file" type="filename" uniform="true" value="resources/images/[Image_Name].[Image_Extension]" />
2020
</tiledimage>
21-
<output name="out_4k_jpg" type="color3" nodename="tiledimage" />
21+
<output name="out" type="color3" nodename="tiledimage" />
2222
</nodegraph>
2323

2424
<!-- top level tokens are not support. bmp will be the found token -->
25-
<token name="Image_Extension" type="string" value="png" uiname="Image Extension" />
25+
<token name="Image_Extension" type="string" value="jpg" uiname="Image Extension" />
2626
<nodegraph name="Tokenized_Image_top_level">
2727
<tiledimage name="tiledimage" type="color3" nodedef="ND_tiledimage_color3">
28-
<token name="Image_Extension" type="string" value="bmp" uiname="Image Extension" />
29-
<input name="file" type="filename" uniform="true" value="resources/Images/cloth.[Image_Extension]" />
28+
<token name="Image_Extension" type="string" value="png" uiname="Image Extension" />
29+
<input name="file" type="filename" uniform="true" value="resources/Images/brass_color.[Image_Extension]" />
3030
</tiledimage>
31-
<output name="out_bmp" type="color3" nodename="tiledimage" />
31+
<output name="out" type="color3" nodename="tiledimage" />
3232
</nodegraph>
3333

34+
<!-- use tokens which are defined by nodedef -->
35+
<nodedef name="ND_token" node="token_image" >
36+
<token name="Image_Name" type="string" value="grid" uiname="Image Name" />
37+
<token name="Image_Extension" type="string" value="png" uiname="Image Extension" />
38+
<output name="out" type="color3"></output>
39+
</nodedef>
40+
<nodegraph name="NG_token" nodedef="ND_token">
41+
<tiledimage name="tiledimage" type="color3" nodedef="ND_tiledimage_color3">
42+
<input name="file" type="filename" uniform="true" value="resources/Images/[Image_Name].[Image_Extension]" />
43+
</tiledimage>
44+
<output name="out" type="color3" nodename="tiledimage" />
45+
</nodegraph>
46+
<nodegraph name="token_nodedef_graph">
47+
<token_image name="token_image1" type="color3">
48+
</token_image>
49+
<output name="out" type="color3" nodename="token_image1"></output>
50+
</nodegraph>
3451
</materialx>

source/MaterialXCore/Element.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -873,6 +873,28 @@ void StringResolver::addTokenSubstitutions(ConstElementPtr element)
873873
setFilenameSubstitution(key, value);
874874
}
875875
}
876+
877+
// This is a functional nodegraph. Get the corresponding nodedef and
878+
// check for tokens on it.
879+
ConstNodeGraphPtr nodegraph = parent->asA<NodeGraph>();
880+
if (nodegraph)
881+
{
882+
NodeDefPtr nodedef = nodegraph->getNodeDef();
883+
if (nodedef)
884+
{
885+
tokens = nodedef->getActiveTokens();
886+
for (auto token : tokens)
887+
{
888+
string key = DELIMITER_PREFIX + token->getName() + DELIMITER_POSTFIX;
889+
string value = token->getResolvedValueString();
890+
if (!_filenameMap.count(key))
891+
{
892+
setFilenameSubstitution(key, value);
893+
}
894+
}
895+
}
896+
}
897+
876898
}
877899
parent = parent->getParent();
878900
}

0 commit comments

Comments
 (0)