public static void GetDependencyPaths(string assetPath, List <string> dependencies) { var textGraph = File.ReadAllText(assetPath, Encoding.UTF8); var entries = MultiJsonInternal.Parse(textGraph); if (string.IsNullOrWhiteSpace(entries[0].type)) { var minimalGraphData = JsonUtility.FromJson <MinimalGraphData>(textGraph); entries.Clear(); foreach (var node in minimalGraphData.m_SerializableNodes) { entries.Add(new MultiJsonEntry(node.typeInfo.fullName, null, node.JSONnodeData)); AbstractMaterialNode0 amn = new AbstractMaterialNode0(); JsonUtility.FromJsonOverwrite(node.JSONnodeData, amn); foreach (var slot in amn.m_SerializableSlots) { entries.Add(new MultiJsonEntry(slot.typeInfo.fullName, null, slot.JSONnodeData)); } } } foreach (var entry in entries) { if (s_MinimalTypeMap.TryGetValue(entry.type, out var minimalType)) { var instance = (IHasDependencies)Activator.CreateInstance(minimalType); JsonUtility.FromJsonOverwrite(entry.json, instance); instance.GetSourceAssetDependencies(dependencies); } } }
// gather all asset dependencies declared by nodes in the given (shadergraph or shadersubgraph) asset // by reading the source file from disk, and doing a minimal parse // returns true if it successfully gathered the dependencies, false if there was an error public static bool GatherMinimalDependenciesFromFile(string assetPath, AssetCollection assetCollection) { var textGraph = FileUtilities.SafeReadAllText(assetPath); // if we can't read the file, no dependencies can be gathered if (string.IsNullOrEmpty(textGraph)) { return(false); } var entries = MultiJsonInternal.Parse(textGraph); if (string.IsNullOrWhiteSpace(entries[0].type)) { var minimalGraphData = JsonUtility.FromJson <MinimalGraphData>(textGraph); entries.Clear(); foreach (var node in minimalGraphData.m_SerializableNodes) { entries.Add(new MultiJsonEntry(node.typeInfo.fullName, null, node.JSONnodeData)); AbstractMaterialNode0 amn = new AbstractMaterialNode0(); JsonUtility.FromJsonOverwrite(node.JSONnodeData, amn); foreach (var slot in amn.m_SerializableSlots) { entries.Add(new MultiJsonEntry(slot.typeInfo.fullName, null, slot.JSONnodeData)); } } } foreach (var entry in entries) { if (s_MinimalTypeMap.TryGetValue(entry.type, out var minimalType)) { var instance = (IHasDependencies)Activator.CreateInstance(minimalType); JsonUtility.FromJsonOverwrite(entry.json, instance); instance.GetSourceAssetDependencies(assetCollection); } } return(true); }