Renderer/ShaderAst: Add NamedVariable and BuiltinVariable classes

This commit is contained in:
Lynix
2017-01-05 13:56:01 +01:00
parent 43e23fea47
commit e82fb7fef4
7 changed files with 88 additions and 17 deletions

View File

@@ -59,7 +59,7 @@ namespace Nz
return state.stream;
}
void GlslWriter::RegisterFunction(const String& name, ShaderAst::StatementPtr statement, std::initializer_list<ShaderAst::VariablePtr> parameters, ShaderAst::ExpressionType retType)
void GlslWriter::RegisterFunction(const String& name, ShaderAst::StatementPtr statement, std::initializer_list<ShaderAst::NamedVariablePtr> parameters, ShaderAst::ExpressionType retType)
{
Function func;
func.retType = retType;
@@ -197,6 +197,11 @@ namespace Nz
Write(node.right);
}
void GlslWriter::Write(const ShaderAst::BuiltinVariable& node)
{
Append(node.var);
}
void GlslWriter::Write(const ShaderAst::Constant& node)
{
switch (node.exprType)
@@ -213,6 +218,11 @@ namespace Nz
Append(";");
}
void GlslWriter::Write(const ShaderAst::NamedVariable& node)
{
Append(node.name);
}
void GlslWriter::Write(const ShaderAst::StatementBlock& node)
{
bool first = true;
@@ -227,9 +237,14 @@ namespace Nz
}
}
void GlslWriter::Write(const ShaderAst::Variable& node)
void GlslWriter::Append(ShaderAst::Builtin builtin)
{
Append(node.name);
switch (builtin)
{
case ShaderAst::Builtin::VertexPosition:
Append("gl_Position");
break;
}
}
void GlslWriter::Append(ShaderAst::ExpressionType type)
@@ -248,6 +263,9 @@ namespace Nz
case ShaderAst::ExpressionType::Float4:
Append("vec4");
break;
case ShaderAst::ExpressionType::Mat4x4:
Append("mat4");
break;
case ShaderAst::ExpressionType::None:
Append("void");
break;

View File

@@ -31,12 +31,22 @@ namespace Nz { namespace ShaderAst
}
void Variable::Register(ShaderWriter& visitor)
void NamedVariable::Register(ShaderWriter& visitor)
{
visitor.RegisterVariable(kind, name, type);
}
void Variable::Visit(ShaderWriter& visitor)
void NamedVariable::Visit(ShaderWriter& visitor)
{
visitor.Write(*this);
}
void BuiltinVariable::Register(ShaderWriter& visitor)
{
}
void BuiltinVariable::Visit(ShaderWriter& visitor)
{
visitor.Write(*this);
}