// Copyright (C) 2020 Jérôme Leclercq // This file is part of the "Nazara Engine - Shader generator" // 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::ShaderBuilder { template struct AssignOpBuilder { constexpr AssignOpBuilder() = default; std::shared_ptr operator()(const ShaderNodes::ExpressionPtr& left, const ShaderNodes::ExpressionPtr& right) const; }; template struct BinOpBuilder { constexpr BinOpBuilder() = default; std::shared_ptr operator()(const ShaderNodes::ExpressionPtr& left, const ShaderNodes::ExpressionPtr& right) const; }; struct BuiltinBuilder { constexpr BuiltinBuilder() = default; inline std::shared_ptr operator()(ShaderNodes::BuiltinEntry builtin) const; }; template struct GenBuilder { constexpr GenBuilder() = default; template std::shared_ptr operator()(Args&&... args) const; }; constexpr GenBuilder AccessMember; constexpr BinOpBuilder Add; constexpr AssignOpBuilder Assign; constexpr BuiltinBuilder Builtin; constexpr GenBuilder Block; constexpr GenBuilder Branch; constexpr GenBuilder ConditionalExpression; constexpr GenBuilder ConditionalStatement; constexpr GenBuilder Constant; constexpr GenBuilder DeclareVariable; constexpr GenBuilder Discard; constexpr BinOpBuilder Divide; constexpr BinOpBuilder Equal; constexpr GenBuilder ExprStatement; constexpr GenBuilder Identifier; constexpr GenBuilder IntrinsicCall; constexpr GenBuilder Input; constexpr GenBuilder Local; constexpr BinOpBuilder Multiply; constexpr GenBuilder Output; constexpr GenBuilder Parameter; constexpr GenBuilder Sample2D; constexpr GenBuilder Swizzle; constexpr BinOpBuilder Substract; constexpr GenBuilder Uniform; template std::shared_ptr Cast(Args&&... args); } #include #endif // NAZARA_SHADER_BUILDER_HPP