static void Main(string[] args) { if (args.Length < 2) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new CompilerForm()); } else { Console.WriteLine("================================ Reading Config ================================ "); CommandLineConfiguration commandLine_ = new CommandLineConfiguration(args); ConfigParserXML xmlconfigfile_ = new ConfigParserXML(); HlslConfiguration config_ = new HlslConfiguration(); commandLine_.CreateConfiguration(); config_.SetDebugMode(commandLine_[Parameters.Mode].ToLower() == "Debug".ToLower()); xmlconfigfile_.ReadConfigurationFile(commandLine_[Parameters.ConfigFile], config_); int successCount_ = 0; int failCount_ = 0; List <string> failList_ = new List <string>(); Console.WriteLine("================================ Compile Started ================================ "); for (int i = 0; i < config_.FileConfiguration.Count; i++) { Console.WriteLine("Compiling: " + commandLine_[Parameters.ProjectDir] + config_.FileConfiguration[i].FileNameRelative); if (ShaderCompiler.CompileShader(commandLine_[Parameters.ProjectDir], commandLine_[Parameters.TargetDir], "GPUCode\\", config_, config_.FileConfiguration[i])) { successCount_++; Console.WriteLine("Compiled to: " + config_.FileConfiguration[i].OutputName); } else { failCount_++; Console.WriteLine("Failed:" + config_.FileConfiguration[i].FileNameRelative); failList_.Add(config_.FileConfiguration[i].FileNameRelative); } if (i - 1 < config_.FileConfiguration.Count) { Console.WriteLine("-------------------------------------------------------------------------------"); } } Console.WriteLine("================================ Compile Completed ================================ "); Console.WriteLine("Total Files to compile: " + config_.FileConfiguration.Count); Console.WriteLine("Total Files Compiled Successfully: " + successCount_); Console.WriteLine("Total Files Failed to Compile/Load: " + failCount_); for (int i = 0; i < failList_.Count; i++) { Console.WriteLine("Failed: " + failList_[i]); } Console.WriteLine("==================================================================================== "); } }
//================================================================================================================// public static bool CompileShader(string baseSourceDirectory, string outputDirectory, string includeDirectory, HlslConfiguration global_, HlslFileConfiguration file) { try { string _path = Path.GetDirectoryName(file.FileNameRelative); IncludeFX include_ = new IncludeFX(baseSourceDirectory + _path + "\\"); Console.WriteLine("Compiler Flags used: " + global_.GetShaderFlagsAsString().ToString()); if (File.Exists(baseSourceDirectory + file.FileNameRelative)) { D3DCompiler.CompilationResult errors_ = D3DCompiler.ShaderBytecode.CompileFromFile(baseSourceDirectory + file.FileNameRelative, file.EntryPoint, file.PixelShaderVersion, global_.GetShaderFlags(), D3DCompiler.EffectFlags.None, null, include_); D3DCompiler.ShaderBytecode shaderByteCode = errors_.Bytecode; if (shaderByteCode != null) { string fileName_ = Path.GetFileNameWithoutExtension(Path.GetFileName(file.FileNameRelative)); string path_ = Path.GetFullPath(outputDirectory); file.OutputName = path_ + fileName_ + ".cso"; System.IO.Directory.CreateDirectory(path_ + "\\"); FileStream write_ = new FileStream(file.OutputName, FileMode.Create, FileAccess.Write); shaderByteCode.Save(write_); } else { throw new Exception(errors_.Message); } return(true); } else { Console.WriteLine("File not found: " + baseSourceDirectory + file.FileNameRelative); } } catch (Exception ex_) { Console.WriteLine("Failed to compile file: " + ex_.Message); return(false); } return(false); }