Skip to content

Commit 43b52cb

Browse files
JavaSaBrNehon
authored andcommitted
Fixed finding definitions during material loading.
1 parent a717a5e commit 43b52cb

1 file changed

Lines changed: 34 additions & 22 deletions

File tree

jme3-core/src/plugins/java/com/jme3/material/plugins/ShaderNodeLoaderDelegate.java

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -899,39 +899,51 @@ public void setAssetManager(AssetManager assetManager) {
899899
}
900900

901901
/**
902-
* find the definition from this statement (loads it if necessary)
902+
* Find the definition from this statement (loads it if necessary)
903903
*
904904
* @param statement the statement being read
905905
* @return the definition
906906
* @throws IOException
907907
*/
908908
public ShaderNodeDefinition findDefinition(Statement statement) throws IOException {
909-
String defLine[] = statement.getLine().split(":");
910-
String defName = defLine[1].trim();
911909

912-
ShaderNodeDefinition def = getNodeDefinitions().get(defName);
913-
if (def == null) {
914-
if (defLine.length == 3) {
915-
List<ShaderNodeDefinition> defs = null;
916-
try {
917-
defs = assetManager.loadAsset(new ShaderNodeDefinitionKey(defLine[2].trim()));
918-
} catch (AssetNotFoundException e) {
919-
throw new MatParseException("Couldn't find " + defLine[2].trim(), statement, e);
920-
}
910+
final String defLine[] = statement.getLine().split(":");
921911

922-
for (ShaderNodeDefinition definition : defs) {
923-
if (defName.equals(definition.getName())) {
924-
def = definition;
925-
}
926-
if (!(getNodeDefinitions().containsKey(definition.getName()))) {
927-
getNodeDefinitions().put(definition.getName(), definition);
928-
}
929-
}
912+
if (defLine.length != 3) {
913+
throw new MatParseException("Can't find shader node definition for: ", statement);
914+
}
915+
916+
final Map<String, ShaderNodeDefinition> nodeDefinitions = getNodeDefinitions();
917+
final String definitionName = defLine[1].trim();
918+
final String definitionPath = defLine[2].trim();
919+
final String fullName = definitionName + ":" + definitionPath;
920+
921+
ShaderNodeDefinition def = nodeDefinitions.get(fullName);
922+
if (def != null) {
923+
return def;
924+
}
925+
926+
List<ShaderNodeDefinition> defs;
927+
try {
928+
defs = assetManager.loadAsset(new ShaderNodeDefinitionKey(definitionPath));
929+
} catch (final AssetNotFoundException e) {
930+
throw new MatParseException("Couldn't find " + definitionPath, statement, e);
931+
}
932+
933+
for (final ShaderNodeDefinition definition : defs) {
934+
if (definitionName.equals(definition.getName())) {
935+
def = definition;
930936
}
931-
if (def == null) {
932-
throw new MatParseException(defName + " is not a declared as Shader Node Definition", statement);
937+
final String key = definition.getName() + ":" + definitionPath;
938+
if (!(nodeDefinitions.containsKey(key))) {
939+
nodeDefinitions.put(key, definition);
933940
}
934941
}
942+
943+
if (def == null) {
944+
throw new MatParseException(definitionName + " is not a declared as Shader Node Definition", statement);
945+
}
946+
935947
return def;
936948
}
937949

0 commit comments

Comments
 (0)