@@ -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