namespace Ghost.DSL.ShaderParser.Model; public class ShaderModel { public string Name { get; set; } = string.Empty; public PropertiesBlockModel? Properties { get; set; } public PipelineBlockModel? Pipeline { get; set; } public List Passes { get; set; } = new(); public List FunctionCalls { get; set; } = new(); } public class PropertiesBlockModel { public List Properties { get; set; } = new(); } public class PropertyDeclarationModel { public string? Scope { get; set; } public string Type { get; set; } = string.Empty; public string Name { get; set; } = string.Empty; public List Initializer { get; set; } = new(); } public class PipelineBlockModel { public Dictionary Statements { get; set; } = new(); } public class PassBlockModel { public string Name { get; set; } = string.Empty; public PipelineBlockModel? LocalPipeline { get; set; } public DefinesBlockModel? Defines { get; set; } public IncludesBlockModel? Includes { get; set; } public KeywordsBlockModel? Keywords { get; set; } public HlslBlockModel? Hlsl { get; set; } public List ShaderEntries { get; set; } = new(); } public class DefinesBlockModel { public List Defines { get; set; } = new(); } public class IncludesBlockModel { public List Includes { get; set; } = new(); } public class KeywordsBlockModel { public List Groups { get; set; } = new(); } public class KeywordGroupModel { public string? Scope { get; set; } public List Keywords { get; set; } = new(); } public class HlslBlockModel { public string Code { get; set; } = string.Empty; } public class ShaderEntryModel { public string EntryType { get; set; } = string.Empty; // "mesh", "pixel", "task", etc. public string ShaderPath { get; set; } = string.Empty; public string EntryPoint { get; set; } = string.Empty; } public class FunctionCallModel { public string Name { get; set; } = string.Empty; public List Arguments { get; set; } = new(); }