// Copyright (C) 2020 Jérôme Leclercq // This file is part of the "Nazara Engine - Renderer module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_SHADER_BUILDER_HPP #define NAZARA_SHADER_BUILDER_HPP #include #include #include namespace Nz { namespace ShaderBuilder { template struct AssignOpBuilder { constexpr AssignOpBuilder() {} std::shared_ptr operator()(const ShaderAst::ExpressionPtr& left, const ShaderAst::ExpressionPtr& right) const; }; template struct BinOpBuilder { constexpr BinOpBuilder() {} std::shared_ptr operator()(const ShaderAst::ExpressionPtr& left, const ShaderAst::ExpressionPtr& right) const; }; struct BuiltinBuilder { constexpr BuiltinBuilder() {} inline std::shared_ptr operator()(ShaderAst::BuiltinEntry builtin) const; }; template struct GenBuilder { constexpr GenBuilder() {} template std::shared_ptr operator()(Args&&... args) const; }; template struct VarBuilder { constexpr VarBuilder() {} template std::shared_ptr operator()(Args&&... args) const; }; constexpr BinOpBuilder Add; constexpr AssignOpBuilder Assign; constexpr BuiltinBuilder Builtin; constexpr GenBuilder Block; constexpr GenBuilder Branch; constexpr GenBuilder ConditionalStatement; constexpr GenBuilder Constant; constexpr BinOpBuilder Divide; constexpr BinOpBuilder Equal; constexpr GenBuilder ExprStatement; constexpr VarBuilder Input; constexpr BinOpBuilder Multiply; constexpr VarBuilder Output; constexpr VarBuilder Parameter; constexpr GenBuilder Sample2D; constexpr GenBuilder Swizzle; constexpr BinOpBuilder Substract; constexpr VarBuilder Uniform; constexpr VarBuilder Variable; template std::shared_ptr Cast(Args&&... args); } } #include #endif // NAZARA_SHADER_BUILDER_HPP