// 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 class GenBuilder { public: template std::shared_ptr operator()(Args&&... args) const { return std::make_shared(std::forward(args)...); } }; template class AssignOpBuilder { public: std::shared_ptr operator()(const Nz::ShaderAst::VariablePtr& left, const Nz::ShaderAst::ExpressionPtr& right) const { return std::make_shared(op, left, right); } }; template class BinOpBuilder { public: std::shared_ptr operator()(const Nz::ShaderAst::ExpressionPtr& left, const Nz::ShaderAst::ExpressionPtr& right) const { return std::make_shared(op, left, right); } }; template class VarBuilder { public: template std::shared_ptr operator()(Args&&... args) const { return std::make_shared(type, std::forward(args)...); } }; constexpr BinOpBuilder Add; constexpr AssignOpBuilder Assign; constexpr BinOpBuilder Equal; constexpr GenBuilder Block; constexpr GenBuilder Branch; constexpr GenBuilder Constant; constexpr GenBuilder ExprStatement; constexpr VarBuilder Variable; } } #include #endif // NAZARA_SHADER_BUILDER_HPP