Renderer/ShaderBuilder: Add builder for builtins

This commit is contained in:
Lynix 2017-01-05 14:04:29 +01:00
parent e82fb7fef4
commit 386c3b1132
1 changed files with 21 additions and 0 deletions

View File

@ -44,6 +44,26 @@ namespace Nz { namespace ShaderBuilder
} }
}; };
class BuiltinBuilder
{
public:
std::shared_ptr<Nz::ShaderAst::Variable> operator()(Nz::ShaderAst::Builtin builtin) const
{
ShaderAst::ExpressionType exprType = ShaderAst::ExpressionType::None;
switch (builtin)
{
case ShaderAst::Builtin::VertexPosition:
exprType = ShaderAst::ExpressionType::Float4;
break;
}
NazaraAssert(exprType != ShaderAst::ExpressionType::None, "Unhandled builtin");
return std::make_shared<Nz::ShaderAst::BuiltinVariable>(builtin, exprType);
}
};
template<Nz::ShaderAst::VariableType type> template<Nz::ShaderAst::VariableType type>
class VarBuilder class VarBuilder
{ {
@ -57,6 +77,7 @@ namespace Nz { namespace ShaderBuilder
constexpr BinOpBuilder<Nz::ShaderAst::BinaryType::Add> Add; constexpr BinOpBuilder<Nz::ShaderAst::BinaryType::Add> Add;
constexpr AssignOpBuilder<Nz::ShaderAst::AssignType::Simple> Assign; constexpr AssignOpBuilder<Nz::ShaderAst::AssignType::Simple> Assign;
constexpr BuiltinBuilder Builtin;
constexpr BinOpBuilder<Nz::ShaderAst::BinaryType::Equality> Equal; constexpr BinOpBuilder<Nz::ShaderAst::BinaryType::Equality> Equal;
constexpr GenBuilder<Nz::ShaderAst::StatementBlock> Block; constexpr GenBuilder<Nz::ShaderAst::StatementBlock> Block;
constexpr GenBuilder<Nz::ShaderAst::Branch> Branch; constexpr GenBuilder<Nz::ShaderAst::Branch> Branch;