// Copyright (C) 2016 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 { std::shared_ptr operator()(const ShaderAst::VariablePtr& left, const ShaderAst::ExpressionPtr& right) const; }; template struct BinOpBuilder { std::shared_ptr operator()(const ShaderAst::ExpressionPtr& left, const ShaderAst::ExpressionPtr& right) const; }; struct BuiltinBuilder { std::shared_ptr operator()(ShaderAst::Builtin builtin) const; }; template struct GenBuilder { template std::shared_ptr operator()(Args&&... args) const; }; template struct VarBuilder { template std::shared_ptr operator()(Args&&... args) const; }; constexpr BinOpBuilder Add; constexpr AssignOpBuilder Assign; constexpr BuiltinBuilder Builtin; constexpr BinOpBuilder Equal; constexpr GenBuilder Block; constexpr GenBuilder Branch; constexpr GenBuilder Constant; constexpr GenBuilder ExprStatement; constexpr VarBuilder Input; constexpr VarBuilder Output; constexpr VarBuilder Parameter; constexpr VarBuilder Uniform; constexpr VarBuilder Variable; } } #include #endif // NAZARA_SHADER_BUILDER_HPP