コード例 #1
0
        public void WriteFactory(string[] files)
        {
            TemplateGroup cppGroup = new Antlr4.StringTemplate.TemplateGroupFile(Program.TemplatesDir + "/factoryTemplateCpp.stg");

            StringBuilder mapping  = new StringBuilder();
            StringBuilder includes = new StringBuilder();

            foreach (var filepath in files)
            {
                string         filenameWithoutExt = Path.GetFileNameWithoutExtension(filepath);
                StringTemplate mapTemplate        = cppGroup.GetInstanceOf("shaderMap");
                mapTemplate.Add("key", filenameWithoutExt);
                mapping.Append(mapTemplate.Render() + '\n');

                StringTemplate inclTemplate = cppGroup.GetInstanceOf("include");
                inclTemplate.Add("filename", filenameWithoutExt);
                includes.Append(inclTemplate.Render() + '\n');
            }
            StringTemplate factoryCppTemplate = cppGroup.GetInstanceOf("factory");

            factoryCppTemplate.Add("includes", includes.ToString());
            factoryCppTemplate.Add("mapping", mapping.ToString());

            string filename = Program.CppOutputDir + "/KiotoShaders";

            System.IO.File.WriteAllText(filename + ".cpp", factoryCppTemplate.Render());

            TemplateGroup  hGroup           = new Antlr4.StringTemplate.TemplateGroupFile(Program.TemplatesDir + "/factoryTemplateH.stg");
            StringTemplate factoryHTemplate = hGroup.GetInstanceOf("factory");

            System.IO.File.WriteAllText(filename + ".h", factoryHTemplate.Render());
        }
コード例 #2
0
        public void WriteHeaders(ShaderOutputContext ctx, string filename)
        {
            TemplateGroup group = new Antlr4.StringTemplate.TemplateGroupFile(Program.TemplatesDir + "/cppTemplate.stg");

            string constantBuffers     = WriteConstantBuffers(ctx, group);
            string constantBufferNames = WriteConstantBuffersNames(ctx, group);
            string constants           = WriteRootConstants(ctx, group);
            string textureSets         = WriteTextureSets(ctx, group);
            string bindings            = WriteBindings(ctx, group);
            string vertexLayouts       = WriteVertexLayouts(ctx, group);
            string programNames        = WriteProgramNames(ctx, group);
            string structs             = WriteStructures(group, ctx.Structures);

            structs += WriteStructures(group, ctx.ConstantBuffers);

            StringTemplate headerTemplate = group.GetInstanceOf("header");

            headerTemplate.Add("name", filename);
            headerTemplate.Add("structs", structs);
            headerTemplate.Add("cbuffers", constantBuffers);
            headerTemplate.Add("cbNames", constantBufferNames);
            headerTemplate.Add("constants", constants);
            headerTemplate.Add("texSets", textureSets);
            headerTemplate.Add("shaderProgs", bindings);
            headerTemplate.Add("vertexLayout", vertexLayouts);
            headerTemplate.Add("shaderProgNames", programNames);
            headerTemplate.Add("shaderPath", "Shaders/" + filename + ".hlsl");

            string outDirHlsl  = Program.CppOutputDir + "/sInp/";
            string filenameOut = outDirHlsl + filename + ".h";

            System.IO.File.WriteAllText(filenameOut, headerTemplate.Render());
        }
コード例 #3
0
ファイル: AcAutoCoder.cs プロジェクト: luoyanfu/AutoCoder
 /// <summary>
 /// initialize template
 /// </summary>
 private static Antlr4.StringTemplate.Template InitializeTemplate()
 {
     var templateName = TemplatePath + "XmlScript.stg";
     Antlr4.StringTemplate.TemplateGroup templateGroup = new Antlr4.StringTemplate.TemplateGroupFile(templateName);
     templateGroup.TrackCreationEvents = true;
     Antlr4.StringTemplate.Template template = templateGroup.GetInstanceOf("XmlScript");
     return template;
 }
コード例 #4
0
ファイル: AcAutoCoder.cs プロジェクト: luoyanfu/AutoCoder
        /// <summary>
        /// initialize template
        /// </summary>
        private static Antlr4.StringTemplate.Template InitializeTemplate()
        {
            var templateName = TemplatePath + "XmlScript.stg";

            Antlr4.StringTemplate.TemplateGroup templateGroup = new Antlr4.StringTemplate.TemplateGroupFile(templateName);
            templateGroup.TrackCreationEvents = true;
            Antlr4.StringTemplate.Template template = templateGroup.GetInstanceOf("XmlScript");
            return(template);
        }
コード例 #5
0
        public void WriteHeaders(ShaderOutputContext ctx, string filename)
        {
            string        filenameUpper = filename.ToUpper();
            TemplateGroup group         = new Antlr4.StringTemplate.TemplateGroupFile(Program.TemplatesDir + "/hlslTemplate.stg");
            StringBuilder result        = new StringBuilder();

            // [a_vorontcov] TODO: move this stuff to the hlsl tempate file.
            result.Append("//////////////////////////////////////////////// \n");
            result.Append("////////// AUTOGENERATED FILE, DO NOT EDIT !//// \n");
            result.Append("//////////////////////////////////////////////// \n");

            result.Append("#ifndef _" + filenameUpper + "_\n");
            result.Append("#define _" + filenameUpper + "_\n");

            result.Append('\n');
            result.Append("#include \"autogen/CommonStructures.hlsl\" \n\n"); // [a_vorontcov] The folder context is the shader folder context, so relative paths are related to it, not to autogenerated files.

            result.Append("///////////////// STRUCTURES /////////////////// ");
            result.Append('\n');

            result.Append(WriteStructures(group, ctx.Structures));
            result.Append(WriteStructures(group, ctx.ConstantBuffers));

            result.Append('\n');
            result.Append('\n');

            result.Append(WriteConstantBuffers(ctx, group));
            string constants = WriteRootConstants(ctx, group);

            result.Append(constants);
            result.Append(WriteTextures(ctx, group));
            result.Append(WriteSamplers(ctx, group));
            result.Append(WriteVertexLayout(ctx, group));

            result.Append("\n#endif // " + filenameUpper);

            string outDirHlsl  = Program.HlslOutputDir;
            string filenameOut = outDirHlsl + "/" + filename + ".hlsl";

            File.WriteAllText(filenameOut, result.ToString());
        }
コード例 #6
0
        public void WriteHeaders(ShaderOutputGlobalContext ctx)
        {
            TemplateGroup  structCppGroup          = new Antlr4.StringTemplate.TemplateGroupFile(Program.TemplatesDir + "/cppTemplate.stg");
            TemplateGroup  commonGroup             = new Antlr4.StringTemplate.TemplateGroupFile(Program.TemplatesDir + "/commonStructuresTemplate.stg");
            var            structWithoutDuplicates = RemoveDuplicates(ctx.Structures);
            string         cppStructures           = CppHeaderWriter.WriteStructures(structCppGroup, structWithoutDuplicates);
            StringTemplate commonTemplate          = commonGroup.GetInstanceOf("cppHeader");

            commonTemplate.Add("structs", cppStructures);

            string cppFilename = Program.CppOutputDir + "/CommonStructures.h";

            System.IO.File.WriteAllText(cppFilename, commonTemplate.Render());

            TemplateGroup  structHlslGroup    = new Antlr4.StringTemplate.TemplateGroupFile(Program.TemplatesDir + "/hlslTemplate.stg");
            string         hlslStructures     = HlslHeadersWriter.WriteStructures(structHlslGroup, structWithoutDuplicates);
            StringTemplate commonHlslTemplate = commonGroup.GetInstanceOf("hlslHeader");

            commonHlslTemplate.Add("structs", hlslStructures);

            string hlslFilename = Program.HlslOutputDir + "/CommonStructures.hlsl";

            System.IO.File.WriteAllText(hlslFilename, commonHlslTemplate.Render());
        }
コード例 #7
0
        private static TemplateGroup LoadPrecRuleTemplates(AntlrTool tool)
        {
            string templateDirs = tool.TemplatesDirectory;
            TemplateGroup group;
            if (!recRuleTemplatesCache.TryGetValue(templateDirs, out group))
            {
                string fileName = CodeGenerator.FindTemplateFile(templateDirs.Split(':'), "LeftRecursiveRules.stg");
                group = new TemplateGroupFile(fileName);
                if (!group.IsDefined("recRuleName"))
                {
                    recRuleTemplatesCache[templateDirs] = group;
                }
                else
                {
                    ErrorManager.Error(ErrorManager.MSG_MISSING_CODE_GEN_TEMPLATES, "PrecRules");
                    return null;
                }
            }

            return group;
        }