Refactoring Rendering backend

This commit is contained in:
2025-10-05 16:26:37 +09:00
parent a39f377533
commit 01a850ff94
99 changed files with 5056 additions and 5136 deletions

View File

@@ -0,0 +1,58 @@
using Ghost.Shader.ParserBlock;
namespace Ghost.Shader;
public struct ShaderError
{
public string message;
public int line;
public int column;
public readonly override string ToString()
{
return $"Error at {line}:{column} - {message}";
}
}
internal static class ShaderCompiler
{
public static List<ShaderSyntax> ParseShaders(TokenStream stream)
{
var shaders = new List<ShaderSyntax>();
while (stream.TryPeek(out var nextToken))
{
if (ShaderBlock.ShouldEnter(nextToken))
{
var shader = ShaderBlock.Parse(stream.SliceNextBlock());
shaders.Add(shader);
}
else if (nextToken.Match(TokenType.EndOfFile))
{
stream.Consume();
}
else
{
throw new Exception($"Unexpected token '{nextToken.lexeme}' at top level. Expected 'shader' declaration.");
}
}
return shaders;
}
public static ShaderModel SemanticAnalysis(ShaderSyntax syntax, out List<ShaderError> errors)
{
var shaderModel = new ShaderModel();
errors = new List<ShaderError>();
shaderModel.name = syntax.name.lexeme;
var propertiesBlock = new PropertiesBlock();
shaderModel.properties = propertiesBlock.SemanticAnalysis(syntax.properties, errors);
var pipelineBlock = new PipelineBlock();
shaderModel.pipeline = pipelineBlock.SemanticAnalysis(syntax.pipeline, errors);
return shaderModel;
}
}