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