Пример #1
0
        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);
        }
Пример #2
0
        private static void Main(string[] args)
        {
            ShaderCodeGenerator codeGenerator = new ShaderCodeGenerator();

            codeGenerator.GenerateDebug(System.IO.File.ReadAllText("test.fx"), "test.fx");
        }
Пример #3
0
        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
        }