private static void Main(string[] args) { if (args.Length != 3) { Console.Error.WriteLine("Usage: cmdxenfx inputFile outputNamespace outputFile"); return; } string source = args[0]; string dest = args[2]; if (!File.Exists(source)) { Console.Error.WriteLine(@"FileNotFound: '{0}'", source); return; } if (File.Exists(dest)) { if (File.GetLastWriteTime(dest) > File.GetLastWriteTime(source) && File.GetLastWriteTime(dest) > File.GetLastWriteTime(typeof(ShaderCodeGenerator).Assembly.Location)) { Console.WriteLine("Skipping... (File has not changed)"); return; } } byte[] code = new ShaderCodeGenerator().GenerateCode(Path.GetFullPath(args[0]), File.ReadAllText(args[0]), args[1], new Microsoft.CSharp.CSharpCodeProvider()); using (Stream file = File.Create(args[2])) file.Write(code, 0, code.Length); }
private static void Main(string[] args) { ShaderCodeGenerator codeGenerator = new ShaderCodeGenerator(); codeGenerator.GenerateDebug(System.IO.File.ReadAllText("test.fx"), "test.fx"); }
private static void ProcessFile(FileInfo fileInfo) { //start reading the file. it should be in the following format: // XenFX // Assembly = Xen.Graphics.ShaderSystem.CustomTool, Version=6.0.0.1, Culture=neutral, PublicKeyToken=e706afd07878dfca // SourceFile = ... // Namespace = ... string expectedAssembly = "// Assembly = " + typeof(ShaderCodeGenerator).Assembly.FullName; #if !DEBUG try { #endif string sourceFile = null; string localNamespace = null; using (FileStream file = fileInfo.OpenRead()) using (StreamReader reader = new StreamReader(file)) { string xenHeader = reader.ReadLine(); string asmHeader = reader.ReadLine(); string srcHeader = reader.ReadLine(); string namespaceHeader = reader.ReadLine(); if (xenHeader != "// XenFX" || asmHeader != expectedAssembly || srcHeader == null || namespaceHeader == null) { if (xenHeader == "// XenFX" && asmHeader != expectedAssembly) { Console.Error.WriteLine(string.Format("Failed to read file, mismatched assembly: \"{0}\" ", Trim(fileInfo.FullName))); } else { Console.Error.WriteLine(string.Format("Failed to read file, Incorrect format: \"{0}\" ", Trim(fileInfo.FullName))); } return; } if (srcHeader.StartsWith("// SourceFile = ") == false || namespaceHeader.StartsWith("// Namespace = ") == false) { Console.Error.WriteLine(string.Format("Failed to read file, unexpected source or namespace declaration: \"{0}\" ", Trim(fileInfo.FullName))); return; } sourceFile = srcHeader.Substring(16); localNamespace = namespaceHeader.Substring(15); if (File.Exists(sourceFile) == false) { Console.Error.WriteLine(string.Format("Failed to read shader source file: \"{0}\" for shader \"{1}\" ", Trim(sourceFile), Trim(fileInfo.FullName))); return; } } //right. Now, see if the file is even out of date! if (File.GetLastWriteTime(sourceFile) > fileInfo.LastWriteTime || generateDate > fileInfo.LastWriteTime) { //great. need to update it! if (codeGenerator == null) { codeGenerator = new ShaderCodeGenerator(); codeProvider = new Microsoft.CSharp.CSharpCodeProvider(); } byte[] shaderCode = codeGenerator.GenerateCode(sourceFile, File.ReadAllText(sourceFile), localNamespace, codeProvider); using (FileStream file = fileInfo.Create()) file.Write(shaderCode, 0, shaderCode.Length); //done! Console.WriteLine(string.Format("Updated: \"{0}\"", Trim(fileInfo.FullName))); } #if !DEBUG } catch (Exception e) { Console.Error.WriteLine(string.Format("Failed to process file: \"{0}\"", fileInfo.FullName)); Console.Error.WriteLine(e.ToString()); } #endif }