Ejemplo n.º 1
0
        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("==================================================================================== ");
            }
        }
Ejemplo n.º 2
0
        //================================================================================================================//

        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);
        }