4 using System.Collections.Generic;
7 namespace SiliconStudio.Shaders.Parser
14 private Stack<string> CurrentDirectory;
15 private List<string> includeDirectories;
16 private HashSet<FileStream> files;
23 CurrentDirectory =
new Stack<string>();
24 includeDirectories =
new List<string>();
25 files =
new HashSet<FileStream>();
32 public string[] IncludeDirectories
36 return includeDirectories.ToArray();
46 if (includeDirectories.Count > 0)
48 if (
string.Compare(includeDirectories[0], directory, StringComparison.InvariantCultureIgnoreCase) == 0)
52 includeDirectories.Add(directory);
60 foreach (var directory
in directories)
61 AddDirectory(directory);
71 var directories =
new List<string>();
72 directories.AddRange(includeDirectories);
73 if (CurrentDirectory.Count > 0)
74 directories.Add(CurrentDirectory.Peek());
76 for (
int i = directories.Count - 1; i >= 0; i--)
78 var includeDirectory = directories[i];
79 string filePath = Path.Combine(includeDirectory, name);
80 if (
File.Exists(filePath))
88 string filePath = FindFullPathForFilename(fileName);
91 var dirPath = Path.GetDirectoryName(filePath);
92 CurrentDirectory.Push(dirPath);
93 return new FileStream(filePath,
FileMode.Open, FileAccess.Read);
95 Console.WriteLine(
"Warning, unable to find include file [{0}] from directories [{1}]", fileName, string.Join(
" ; ", IncludeDirectories));
102 CurrentDirectory.Pop();
void AddDirectory(string directory)
Adds the directory.
Default IncludeHandler implementation loading files from a set of predefined directories.
System.IO.FileMode FileMode
Stream Open(IncludeType type, string fileName, Stream parentStream)
A user-implemented method for opening and reading the contents of a shader #include file...
void AddDirectories(IEnumerable< string > directories)
Adds the directories.
IncludeType
Type of include file.
DefaultIncludeHandler()
Initializes a new instance of the DefaultIncludeHandler class.
string FindFullPathForFilename(string name)
Finds the full path for filename from the set of IncludeDirectories defined.
Callback interface to handle included file requested by the PreProcessor.
void Close(Stream stream)
A user-implemented method for closing a shader #include file.